home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 January: Mac OS SDK / Dev.CD Jan 99 SDK1.toast / Development Kits / Interfaces&Libraries / Universal / Interfaces / AIncludes / QuickTimeMusic.a < prev    next >
Encoding:
Text File  |  1998-08-17  |  91.9 KB  |  2,772 lines  |  [TEXT/MPS ]

  1. ;
  2. ;    File:        QuickTimeMusic.a
  3. ;
  4. ;    Contains:    QuickTime Interfaces.
  5. ;
  6. ;    Version:    Technology:    QuickTime 3.0
  7. ;                Release:    Universal Interfaces 3.2
  8. ;
  9. ;    Copyright:    © 1990-1998 by Apple Computer, Inc., all rights reserved
  10. ;
  11. ;    Bugs?:        For bug reports, consult the following page on
  12. ;                the World Wide Web:
  13. ;
  14. ;                    http://developer.apple.com/bugreporter/
  15. ;
  16. ;
  17.     IF &TYPE('__QUICKTIMEMUSIC__') = 'UNDEFINED' THEN
  18. __QUICKTIMEMUSIC__ SET 1
  19.  
  20.     IF &TYPE('__COMPONENTS__') = 'UNDEFINED' THEN
  21.     include 'Components.a'
  22.     ENDIF
  23.     IF &TYPE('__IMAGECOMPRESSION__') = 'UNDEFINED' THEN
  24.     include 'ImageCompression.a'
  25.     ENDIF
  26.     IF &TYPE('__MOVIES__') = 'UNDEFINED' THEN
  27.     include 'Movies.a'
  28.     ENDIF
  29.     IF &TYPE('__QUICKDRAW__') = 'UNDEFINED' THEN
  30.     include 'Quickdraw.a'
  31.     ENDIF
  32.     IF &TYPE('__VIDEO__') = 'UNDEFINED' THEN
  33.     include 'Video.a'
  34.     ENDIF
  35.     IF &TYPE('__MACMEMORY__') = 'UNDEFINED' THEN
  36.     include 'MacMemory.a'
  37.     ENDIF
  38.     IF &TYPE('__SOUND__') = 'UNDEFINED' THEN
  39.     include 'Sound.a'
  40.     ENDIF
  41.     IF &TYPE('__ENDIAN__') = 'UNDEFINED' THEN
  42.     include 'Endian.a'
  43.     ENDIF
  44.  
  45.  
  46. kaiToneDescType                    EQU        'tone'
  47. kaiNoteRequestInfoType            EQU        'ntrq'
  48. kaiKnobListType                    EQU        'knbl'
  49. kaiKeyRangeInfoType                EQU        'sinf'
  50. kaiSampleDescType                EQU        'sdsc'
  51. kaiSampleInfoType                EQU        'smin'
  52. kaiSampleDataType                EQU        'sdat'
  53. kaiSampleDataQUIDType            EQU        'quid'
  54. kaiInstInfoType                    EQU        'iinf'
  55. kaiPictType                        EQU        'pict'
  56. kaiWriterType                    EQU        '©wrt'
  57. kaiCopyrightType                EQU        '©cpy'
  58. kaiOtherStrType                    EQU        'str '
  59. kaiInstrumentRefType            EQU        'iref'
  60. kaiInstGMQualityType            EQU        'qual'
  61. kaiLibraryInfoType                EQU        'linf'
  62. kaiLibraryDescType                EQU        'ldsc'
  63. InstLibDescRec            RECORD 0
  64. libIDName                 ds        Str31            ; offset: $0 (0)
  65. sizeof                     EQU *                    ; size:   $20 (32)
  66.                         ENDR
  67. InstKnobRec                RECORD 0
  68. number                     ds        BigEndianLong    ; offset: $0 (0)
  69. value                     ds        BigEndianLong    ; offset: $4 (4)
  70. sizeof                     EQU *                    ; size:   $8 (8)
  71.                         ENDR
  72.  
  73. kInstKnobMissingUnknown            EQU        0
  74. kInstKnobMissingDefault            EQU        $01
  75. InstKnobList            RECORD 0
  76. knobCount                 ds        BigEndianLong    ; offset: $0 (0)
  77. knobFlags                 ds        BigEndianLong    ; offset: $4 (4)
  78. knob                     ds        InstKnobRec        ; offset: $8 (8) <-- really an array of length one
  79. sizeof                     EQU *                    ; size:   $10 (16)
  80.                         ENDR
  81.  
  82. kMusicLoopTypeNormal            EQU        0
  83. kMusicLoopTypePalindrome        EQU        1                    ; back & forth
  84.  
  85. instSamplePreProcessFlag        EQU        $01
  86. InstSampleDescRec        RECORD 0
  87. dataFormat                 ds        BigEndianOSType ; offset: $0 (0)
  88. numChannels                 ds        BigEndianShort ; offset: $4 (4)
  89. sampleSize                 ds        BigEndianShort ; offset: $6 (6)
  90. sampleRate                 ds        BigEndianUnsignedFixed ; offset: $8 (8)
  91. sampleDataID             ds        BigEndianShort ; offset: $C (12)
  92. offset                     ds        BigEndianLong    ; offset: $E (14)        ;  offset within SampleData - this could be just for internal use
  93. numSamples                 ds        BigEndianLong    ; offset: $12 (18)        ;  this could also just be for internal use, we'll see
  94. loopType                 ds        BigEndianLong    ; offset: $16 (22)
  95. loopStart                 ds        BigEndianLong    ; offset: $1A (26)
  96. loopEnd                     ds        BigEndianLong    ; offset: $1E (30)
  97. pitchNormal                 ds        BigEndianLong    ; offset: $22 (34)
  98. pitchLow                 ds        BigEndianLong    ; offset: $26 (38)
  99. pitchHigh                 ds        BigEndianLong    ; offset: $2A (42)
  100. sizeof                     EQU *                    ; size:   $2E (46)
  101.                         ENDR
  102. ; typedef Handle                         AtomicInstrument
  103.  
  104. ; typedef Ptr                             AtomicInstrumentPtr
  105.  
  106.  
  107. kQTMIDIComponentType            EQU        'midi'
  108.  
  109. kOMSComponentSubType            EQU        'OMS '
  110. kFMSComponentSubType            EQU        'FMS '
  111. kMIDIManagerComponentSubType    EQU        'mmgr'
  112. ; typedef ComponentInstance             QTMIDIComponent
  113.  
  114.  
  115. kMusicPacketPortLost            EQU        1                    ; received when application loses the default input port 
  116. kMusicPacketPortFound            EQU        2                    ; received when application gets it back out from under someone else's claim 
  117. kMusicPacketTimeGap                EQU        3                    ; data[0] = number of milliseconds to keep the MIDI line silent 
  118.  
  119. kAppleSysexID                    EQU        $11                    ; apple sysex is followed by 2-byte command. 0001 is the command for samplesize 
  120. kAppleSysexCmdSampleSize        EQU        $0001                ; 21 bit number in 3 midi bytes follows sysex ID and 2 cmd bytes 
  121. kAppleSysexCmdSampleBreak        EQU        $0002                ; specifies that the sample should break right here 
  122. kAppleSysexCmdAtomicInstrument    EQU        $0010                ; contents of atomic instrument handle 
  123. kAppleSysexCmdDeveloper            EQU        $7F00                ; F0 11 7F 00 ww xx yy zz ... F7 is available for non-Apple developers, where wxyz is unique app signature with 8th bit cleared, unique to developer, and 00 and 7f are reserved 
  124. MusicMIDIPacket            RECORD 0
  125. length                     ds.w    1                ; offset: $0 (0)
  126. reserved                 ds.l    1                ; offset: $2 (2)        ;  if length zero, then reserved = above enum 
  127. data                     ds.b    249                ; offset: $6 (6)
  128.                          ORG 256
  129. sizeof                     EQU *                    ; size:   $100 (256)
  130.                         ENDR
  131.  
  132. kSynthesizerConnectionFMS        EQU        1                    ; this connection imported from FMS 
  133. kSynthesizerConnectionMMgr        EQU        2                    ; this connection imported from the MIDI Mgr 
  134. kSynthesizerConnectionOMS        EQU        4                    ; this connection imported from OMS 
  135. kSynthesizerConnectionQT        EQU        8                    ; this connection is a QuickTime-only port 
  136.                                                             ; lowest four bits are mutually exclusive; combinations reserved for future use.
  137. kSynthesizerConnectionUnavailable EQU    256                    ; port exists, but cannot be used just now 
  138. SynthesizerConnections    RECORD 0
  139. clientID                 ds.l    1                ; offset: $0 (0)
  140. inputPortID                 ds.l    1                ; offset: $4 (4)        ;  terminology death: this port is used to SEND to the midi synth 
  141. outputPortID             ds.l    1                ; offset: $8 (8)        ;  terminology death: this port receives from a keyboard or other control device 
  142. midiChannel                 ds.l    1                ; offset: $C (12)        ;  The system channel; others are configurable (or the nubus slot number) 
  143. flags                     ds.l    1                ; offset: $10 (16)
  144. unique                     ds.l    1                ; offset: $14 (20)        ;  unique id may be used instead of index, to getinfo and unregister calls 
  145. reserved1                 ds.l    1                ; offset: $18 (24)        ;  should be zero 
  146. reserved2                 ds.l    1                ; offset: $1C (28)        ;  should be zero 
  147. sizeof                     EQU *                    ; size:   $20 (32)
  148.                         ENDR
  149. QTMIDIPort                RECORD 0
  150. portConnections             ds        SynthesizerConnections ; offset: $0 (0)
  151. portName                 ds        Str63            ; offset: $20 (32)
  152. sizeof                     EQU *                    ; size:   $60 (96)
  153.                         ENDR
  154. QTMIDIPortList            RECORD 0
  155. portCount                 ds.w    1                ; offset: $0 (0)
  156. port                     ds        QTMIDIPort        ; offset: $2 (2) <-- really an array of length one
  157. sizeof                     EQU *                    ; size:   $62 (98)
  158.                         ENDR
  159. ; typedef struct QTMIDIPortList *        QTMIDIPortListPtr
  160.  
  161. ; typedef QTMIDIPortListPtr *            QTMIDIPortListHandle
  162.  
  163. ;
  164. ; pascal ComponentResult QTMIDIGetMIDIPorts(QTMIDIComponent ci, QTMIDIPortListHandle *inputPorts, QTMIDIPortListHandle *outputPorts)
  165. ;
  166.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  167.         Macro
  168.         _QTMIDIGetMIDIPorts
  169.             move.l              #$00080001,-(sp)
  170.             moveq               #0,D0
  171.             dc.w                $A82A
  172.         EndM
  173.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  174.         IMPORT_CFM_FUNCTION QTMIDIGetMIDIPorts
  175.     ENDIF
  176.  
  177. ;
  178. ; pascal ComponentResult QTMIDIUseSendPort(QTMIDIComponent ci, long portIndex, long inUse)
  179. ;
  180.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  181.         Macro
  182.         _QTMIDIUseSendPort
  183.             move.l              #$00080002,-(sp)
  184.             moveq               #0,D0
  185.             dc.w                $A82A
  186.         EndM
  187.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  188.         IMPORT_CFM_FUNCTION QTMIDIUseSendPort
  189.     ENDIF
  190.  
  191. ;
  192. ; pascal ComponentResult QTMIDISendMIDI(QTMIDIComponent ci, long portIndex, MusicMIDIPacket *mp)
  193. ;
  194.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  195.         Macro
  196.         _QTMIDISendMIDI
  197.             move.l              #$00080003,-(sp)
  198.             moveq               #0,D0
  199.             dc.w                $A82A
  200.         EndM
  201.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  202.         IMPORT_CFM_FUNCTION QTMIDISendMIDI
  203.     ENDIF
  204.  
  205. ;
  206. ; pascal ComponentResult QTMIDIUseReceivePort(QTMIDIComponent ci, long portIndex, MusicMIDIReadHookUPP readHook, long refCon)
  207. ;
  208.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  209.         Macro
  210.         _QTMIDIUseReceivePort
  211.             move.l              #$000C0004,-(sp)
  212.             moveq               #0,D0
  213.             dc.w                $A82A
  214.         EndM
  215.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  216.         IMPORT_CFM_FUNCTION QTMIDIUseReceivePort
  217.     ENDIF
  218.  
  219.  
  220.  
  221.  
  222. kMusicComponentType                EQU        'musi'
  223. kInstrumentComponentType        EQU        'inst'
  224.  
  225. kSoftSynthComponentSubType        EQU        'ss  '
  226. kGMSynthComponentSubType        EQU        'gm  '
  227.  
  228. ; typedef ComponentInstance             MusicComponent
  229.  
  230. ;  MusicSynthesizerFlags
  231.  
  232. kSynthesizerDynamicVoice        EQU        $01                    ; can assign voices on the fly (else, polyphony is very important 
  233. kSynthesizerUsesMIDIPort        EQU        $02                    ; must be patched through MIDI Manager 
  234. kSynthesizerMicrotone            EQU        $04                    ; can play microtonal scales 
  235. kSynthesizerHasSamples            EQU        $08                    ; synthesizer has some use for sampled data 
  236. kSynthesizerMixedDrums            EQU        $10                    ; any part can play drum parts, total = instrument parts 
  237. kSynthesizerSoftware            EQU        $20                    ; implemented in main CPU software == uses cpu cycles 
  238. kSynthesizerHardware            EQU        $40                    ; is a hardware device (such as nubus, or maybe DSP?) 
  239. kSynthesizerDynamicChannel        EQU        $80                    ; can move any part to any channel or disable each part. (else we assume it lives on all channels in masks) 
  240. kSynthesizerHogsSystemChannel    EQU        $0100                ; can be channelwise dynamic, but always responds on its system channel 
  241. kSynthesizerHasSystemChannel    EQU        $0200                ; has some "system channel" notion to distinguish it from multiple instances of the same device (GM devices dont) 
  242. kSynthesizerSlowSetPart            EQU        $0400                ; SetPart() and SetPartInstrumentNumber() calls do not have rapid response, may glitch notes 
  243. kSynthesizerOffline                EQU        $1000                ; can enter an offline synthesis mode 
  244. kSynthesizerGM                    EQU        $4000                ; synth is a GM device 
  245. kSynthesizerDLS                    EQU        $8000                ; synth supports DLS level 1 
  246. kSynthesizerSoundLocalization    EQU        $00010000            ; synth supports extremely baroque, nonstandard, and proprietary "apple game sprockets" localization parameter set 
  247. ; * Note that these controller numbers
  248. ; * are _not_ identical to the MIDI controller numbers.
  249. ; * These are _signed_ 8.8 values, and the LSB's are
  250. ; * always sent to a MIDI device. Controllers 32-63 are
  251. ; * reserved (for MIDI, they are LSB's for 0-31, but we
  252. ; * always send both).
  253. ; *
  254. ; * The full range, therefore, is -128.00 to 127.7f.
  255. ; *
  256. ; * _Excepting_ _volume_, all controls default to zero.
  257. ; *
  258. ; * Pitch bend is specified in fractional semitones! No
  259. ; * more "pitch bend range" nonsense. You can bend as far
  260. ; * as you want, any time you want.
  261.  
  262. ; typedef SInt32                         MusicController
  263.  
  264.  
  265. kControllerModulationWheel        EQU        1
  266. kControllerBreath                EQU        2
  267. kControllerFoot                    EQU        4
  268. kControllerPortamentoTime        EQU        5                    ; time in 8.8 seconds, portamento on/off is omitted, 0 time = 'off' 
  269. kControllerVolume                EQU        7                    ; main volume control 
  270. kControllerBalance                EQU        8
  271. kControllerPan                    EQU        10                    ; 0 - "default", 1 - n: positioned in output 1-n (incl fractions) 
  272. kControllerExpression            EQU        11                    ; secondary volume control 
  273. kControllerLever1                EQU        16                    ; general purpose controllers 
  274. kControllerLever2                EQU        17                    ; general purpose controllers 
  275. kControllerLever3                EQU        18                    ; general purpose controllers 
  276. kControllerLever4                EQU        19                    ; general purpose controllers 
  277. kControllerLever5                EQU        80                    ; general purpose controllers 
  278. kControllerLever6                EQU        81                    ; general purpose controllers 
  279. kControllerLever7                EQU        82                    ; general purpose controllers 
  280. kControllerLever8                EQU        83                    ; general purpose controllers 
  281. kControllerPitchBend            EQU        32                    ; positive & negative semitones, with 8 bits fraction, same units as transpose controllers
  282. kControllerAfterTouch            EQU        33                    ; aka channel pressure 
  283. kControllerPartTranspose        EQU        40                    ; identical to pitchbend, for overall part xpose 
  284. kControllerTuneTranspose        EQU        41                    ; another pitchbend, for "song global" pitch offset 
  285. kControllerPartVolume            EQU        42                    ; another volume control, passed right down from note allocator part volume 
  286. kControllerTuneVolume            EQU        43                    ; another volume control, used for "song global" volume - since we share one synthesizer across multiple tuneplayers
  287. kControllerSustain                EQU        64                    ; boolean - positive for on, 0 or negative off 
  288. kControllerPortamento            EQU        65                    ; boolean
  289. kControllerSostenuto            EQU        66                    ; boolean 
  290. kControllerSoftPedal            EQU        67                    ; boolean 
  291. kControllerReverb                EQU        91
  292. kControllerTremolo                EQU        92
  293. kControllerChorus                EQU        93
  294. kControllerCeleste                EQU        94
  295. kControllerPhaser                EQU        95
  296. kControllerEditPart                EQU        113                    ; last 16 controllers 113-128 and above are global controllers which respond on part zero 
  297. kControllerMasterTune            EQU        114
  298. kControllerMasterTranspose        EQU        114                    ; preferred
  299. kControllerMasterVolume            EQU        115
  300. kControllerMasterCPULoad        EQU        116
  301. kControllerMasterPolyphony        EQU        117
  302. kControllerMasterFeatures        EQU        118
  303.  
  304. ;  ID's of knobs supported by the QuickTime Music Synthesizer built into QuickTime
  305.  
  306.  
  307. kQTMSKnobStartID                EQU        $02000000
  308. kQTMSKnobVolumeAttackTimeID        EQU        $02000001
  309. kQTMSKnobVolumeDecayTimeID        EQU        $02000002
  310. kQTMSKnobVolumeSustainLevelID    EQU        $02000003
  311. kQTMSKnobVolumeRelease1RateID    EQU        $02000004
  312. kQTMSKnobVolumeDecayKeyScalingID EQU    $02000005
  313. kQTMSKnobVolumeReleaseTimeID    EQU        $02000006
  314. kQTMSKnobVolumeLFODelayID        EQU        $02000007
  315. kQTMSKnobVolumeLFORampTimeID    EQU        $02000008
  316. kQTMSKnobVolumeLFOPeriodID        EQU        $02000009
  317. kQTMSKnobVolumeLFOShapeID        EQU        $0200000A
  318. kQTMSKnobVolumeLFODepthID        EQU        $0200000B
  319. kQTMSKnobVolumeOverallID        EQU        $0200000C
  320. kQTMSKnobVolumeVelocity127ID    EQU        $0200000D
  321. kQTMSKnobVolumeVelocity96ID        EQU        $0200000E
  322. kQTMSKnobVolumeVelocity64ID        EQU        $0200000F
  323. kQTMSKnobVolumeVelocity32ID        EQU        $02000010
  324. kQTMSKnobVolumeVelocity16ID        EQU        $02000011            ; Pitch related knobs
  325. kQTMSKnobPitchTransposeID        EQU        $02000012
  326. kQTMSKnobPitchLFODelayID        EQU        $02000013
  327. kQTMSKnobPitchLFORampTimeID        EQU        $02000014
  328. kQTMSKnobPitchLFOPeriodID        EQU        $02000015
  329. kQTMSKnobPitchLFOShapeID        EQU        $02000016
  330. kQTMSKnobPitchLFODepthID        EQU        $02000017
  331. kQTMSKnobPitchLFOQuantizeID        EQU        $02000018            ; Stereo related knobs
  332. kQTMSKnobStereoDefaultPanID        EQU        $02000019
  333. kQTMSKnobStereoPositionKeyScalingID EQU    $0200001A
  334. kQTMSKnobPitchLFOOffsetID        EQU        $0200001B
  335. kQTMSKnobExclusionGroupID        EQU        $0200001C            ; Misc knobs, late additions
  336. kQTMSKnobSustainTimeID            EQU        $0200001D
  337. kQTMSKnobSustainInfiniteID        EQU        $0200001E
  338. kQTMSKnobVolumeLFOStereoID        EQU        $0200001F
  339. kQTMSKnobVelocityLowID            EQU        $02000020
  340. kQTMSKnobVelocityHighID            EQU        $02000021
  341. kQTMSKnobVelocitySensitivityID    EQU        $02000022
  342. kQTMSKnobPitchSensitivityID        EQU        $02000023
  343. kQTMSKnobVolumeLFODepthFromWheelID EQU    $02000024
  344. kQTMSKnobPitchLFODepthFromWheelID EQU    $02000025            ; Volume Env again
  345. kQTMSKnobVolumeExpOptionsID        EQU        $02000026            ; Env1
  346. kQTMSKnobEnv1AttackTimeID        EQU        $02000027
  347. kQTMSKnobEnv1DecayTimeID        EQU        $02000028
  348. kQTMSKnobEnv1SustainLevelID        EQU        $02000029
  349. kQTMSKnobEnv1SustainTimeID        EQU        $0200002A
  350. kQTMSKnobEnv1SustainInfiniteID    EQU        $0200002B
  351. kQTMSKnobEnv1ReleaseTimeID        EQU        $0200002C
  352. kQTMSKnobEnv1ExpOptionsID        EQU        $0200002D            ; Env2
  353. kQTMSKnobEnv2AttackTimeID        EQU        $0200002E
  354. kQTMSKnobEnv2DecayTimeID        EQU        $0200002F
  355. kQTMSKnobEnv2SustainLevelID        EQU        $02000030
  356. kQTMSKnobEnv2SustainTimeID        EQU        $02000031
  357. kQTMSKnobEnv2SustainInfiniteID    EQU        $02000032
  358. kQTMSKnobEnv2ReleaseTimeID        EQU        $02000033
  359. kQTMSKnobEnv2ExpOptionsID        EQU        $02000034            ; Pitch Env
  360. kQTMSKnobPitchEnvelopeID        EQU        $02000035
  361. kQTMSKnobPitchEnvelopeDepthID    EQU        $02000036            ; Filter
  362. kQTMSKnobFilterKeyFollowID        EQU        $02000037
  363. kQTMSKnobFilterTransposeID        EQU        $02000038
  364. kQTMSKnobFilterQID                EQU        $02000039
  365. kQTMSKnobFilterFrequencyEnvelopeID EQU    $0200003A
  366. kQTMSKnobFilterFrequencyEnvelopeDepthID EQU $0200003B
  367. kQTMSKnobFilterQEnvelopeID        EQU        $0200003C
  368. kQTMSKnobFilterQEnvelopeDepthID    EQU        $0200003D            ; Reverb Threshhold
  369. kQTMSKnobReverbThresholdID        EQU        $0200003E
  370. kQTMSKnobVolumeAttackVelScalingID EQU    $0200003F
  371. kQTMSKnobLastIDPlus1            EQU        $02000040
  372.  
  373.  
  374.  
  375.  
  376. kControllerMaximum                EQU        $00007FFF            ; +01111111.11111111 
  377. kControllerMinimum                EQU        $FFFF8000            ; -10000000.00000000 
  378. SynthesizerDescription    RECORD 0
  379. synthesizerType             ds.l    1                ; offset: $0 (0)        ;  synthesizer type (must be same as component subtype) 
  380. name                     ds        Str31            ; offset: $4 (4)        ;  text name of synthesizer type 
  381. flags                     ds.l    1                ; offset: $24 (36)        ;  from the above enum 
  382. voiceCount                 ds.l    1                ; offset: $28 (40)        ;  maximum polyphony 
  383. partCount                 ds.l    1                ; offset: $2C (44)        ;  maximum multi-timbrality (and midi channels) 
  384. instrumentCount             ds.l    1                ; offset: $30 (48)        ;  non gm, built in (rom) instruments only 
  385. modifiableInstrumentCount  ds.l    1                ; offset: $34 (52)        ;  plus n-more are user modifiable 
  386. channelMask                 ds.l    1                ; offset: $38 (56)        ;  (midi device only) which channels device always uses 
  387. drumPartCount             ds.l    1                ; offset: $3C (60)        ;  maximum multi-timbrality of drum parts 
  388. drumCount                 ds.l    1                ; offset: $40 (64)        ;  non gm, built in (rom) drumkits only 
  389. modifiableDrumCount         ds.l    1                ; offset: $44 (68)        ;  plus n-more are user modifiable 
  390. drumChannelMask             ds.l    1                ; offset: $48 (72)        ;  (midi device only) which channels device always uses 
  391. outputCount                 ds.l    1                ; offset: $4C (76)        ;  number of audio outputs (usually two) 
  392. latency                     ds.l    1                ; offset: $50 (80)        ;  response time in µSec 
  393. controllers                 ds.l    4                ; offset: $54 (84)        ;  array of 128 bits 
  394. gmInstruments             ds.l    4                ; offset: $64 (100)        ;  array of 128 bits 
  395. gmDrums                     ds.l    4                ; offset: $74 (116)        ;  array of 128 bits 
  396. sizeof                     EQU *                    ; size:   $84 (132)
  397.                         ENDR
  398.  
  399. kVoiceCountDynamic                EQU        -1                    ; constant to use to specify dynamic voicing 
  400.  
  401. ToneDescription            RECORD 0
  402. synthesizerType             ds        BigEndianOSType ; offset: $0 (0)        ;  synthesizer type 
  403. synthesizerName             ds        Str31            ; offset: $4 (4)        ;  name of instantiation of synth 
  404. instrumentName             ds        Str31            ; offset: $24 (36)        ;  preferred name for human use 
  405. instrumentNumber         ds        BigEndianLong    ; offset: $44 (68)        ;  inst-number used if synth-name matches 
  406. gmNumber                 ds        BigEndianLong    ; offset: $48 (72)        ;  Best matching general MIDI number 
  407. sizeof                     EQU *                    ; size:   $4C (76)
  408.                         ENDR
  409.  
  410. kFirstGMInstrument                EQU        $00000001
  411. kLastGMInstrument                EQU        $00000080
  412. kFirstGSInstrument                EQU        $00000081
  413. kLastGSInstrument                EQU        $00003FFF
  414. kFirstDrumkit                    EQU        $00004000            ; (first value is "no drum". instrument numbers from 16384->16384+128 are drumkits, and for GM they are _defined_ drumkits! 
  415. kLastDrumkit                    EQU        $00004080
  416. kFirstROMInstrument                EQU        $00008000
  417. kLastROMInstrument                EQU        $0000FFFF
  418. kFirstUserInstrument            EQU        $00010000
  419. kLastUserInstrument                EQU        $0001FFFF
  420. ;  InstrumentMatch
  421.  
  422. kInstrumentMatchSynthesizerType    EQU        1
  423. kInstrumentMatchSynthesizerName    EQU        2
  424. kInstrumentMatchName            EQU        4
  425. kInstrumentMatchNumber            EQU        8
  426. kInstrumentMatchGMNumber        EQU        16
  427. kInstrumentMatchGSNumber        EQU        32
  428. ;  KnobFlags
  429.  
  430. kKnobBasic                        EQU        8                    ; knob shows up in certain simplified lists of knobs 
  431. kKnobReadOnly                    EQU        16                    ; knob value cannot be changed by user or with a SetKnob call 
  432. kKnobInterruptUnsafe            EQU        32                    ; only alter this knob from foreground task time (may access toolbox) 
  433. kKnobKeyrangeOverride            EQU        64                    ; knob can be overridden within a single keyrange (software synth only) 
  434. kKnobGroupStart                    EQU        128                    ; knob is first in some logical group of knobs 
  435. kKnobFixedPoint8                EQU        1024
  436. kKnobFixedPoint16                EQU        2048                ; One of these may be used at a time. 
  437. kKnobTypeNumber                    EQU        $00
  438. kKnobTypeGroupName                EQU        $1000                ; "knob" is really a group name for display purposes 
  439. kKnobTypeBoolean                EQU        $2000                ; if range is greater than 1, its a multi-checkbox field 
  440. kKnobTypeNote                    EQU        $3000                ; knob range is equivalent to MIDI keys 
  441. kKnobTypePan                    EQU        $4000                ; range goes left/right (lose this? ) 
  442. kKnobTypeInstrument                EQU        $5000                ; knob value = reference to another instrument number 
  443. kKnobTypeSetting                EQU        $6000                ; knob value is 1 of n different things (eg, fm algorithms) popup menu 
  444. kKnobTypeMilliseconds            EQU        $7000                ; knob is a millisecond time range 
  445. kKnobTypePercentage                EQU        $8000                ; knob range is displayed as a Percentage 
  446. kKnobTypeHertz                    EQU        $9000                ; knob represents frequency 
  447. kKnobTypeButton                    EQU        $A000                ; momentary trigger push button 
  448.  
  449.  
  450. kUnknownKnobValue                EQU        $7FFFFFFF            ; a knob with this value means, we don't know it. 
  451. kDefaultKnobValue                EQU        $7FFFFFFE            ; used to SET a knob to its default value. 
  452. KnobDescription            RECORD 0
  453. name                     ds        Str63            ; offset: $0 (0)
  454. lowValue                 ds.l    1                ; offset: $40 (64)
  455. highValue                 ds.l    1                ; offset: $44 (68)
  456. defaultValue             ds.l    1                ; offset: $48 (72)        ;  a default instrument is made of all default values 
  457. flags                     ds.l    1                ; offset: $4C (76)
  458. knobID                     ds.l    1                ; offset: $50 (80)
  459. sizeof                     EQU *                    ; size:   $54 (84)
  460.                         ENDR
  461. GCInstrumentData        RECORD 0
  462. tone                     ds        ToneDescription ; offset: $0 (0)
  463. knobCount                 ds.l    1                ; offset: $4C (76)
  464. knob                     ds.l    1                ; offset: $50 (80) <-- really an array of length one
  465. sizeof                     EQU *                    ; size:   $54 (84)
  466.                         ENDR
  467. ; typedef struct GCInstrumentData *        GCInstrumentDataPtr
  468.  
  469. ; typedef GCInstrumentDataPtr *            GCInstrumentDataHandle
  470.  
  471. InstrumentAboutInfo        RECORD 0
  472. p                         ds.l    1                ; offset: $0 (0)
  473. author                     ds        Str255            ; offset: $4 (4)
  474. copyright                 ds        Str255            ; offset: $104 (260)
  475. other                     ds        Str255            ; offset: $204 (516)
  476. sizeof                     EQU *                    ; size:   $304 (772)
  477.                         ENDR
  478.  
  479.  
  480. notImplementedMusicErr            EQU        $8000F7E9
  481. cantSendToSynthesizerErr        EQU        $8000F7E8
  482. cantReceiveFromSynthesizerErr    EQU        $8000F7E7
  483. illegalVoiceAllocationErr        EQU        $8000F7E6
  484. illegalPartErr                    EQU        $8000F7E5
  485. illegalChannelErr                EQU        $8000F7E4
  486. illegalKnobErr                    EQU        $8000F7E3
  487. illegalKnobValueErr                EQU        $8000F7E2
  488. illegalInstrumentErr            EQU        $8000F7E1
  489. illegalControllerErr            EQU        $8000F7E0
  490. midiManagerAbsentErr            EQU        $8000F7DF
  491. synthesizerNotRespondingErr        EQU        $8000F7DE
  492. synthesizerErr                    EQU        $8000F7DD
  493. illegalNoteChannelErr            EQU        $8000F7DC
  494. noteChannelNotAllocatedErr        EQU        $8000F7DB
  495. tunePlayerFullErr                EQU        $8000F7DA
  496. tuneParseErr                    EQU        $8000F7D9
  497.  
  498. kGetAtomicInstNoExpandedSamples    EQU        $01
  499. kGetAtomicInstNoOriginalSamples    EQU        $02
  500. kGetAtomicInstNoSamples            EQU        $03
  501. kGetAtomicInstNoKnobList        EQU        $04
  502. kGetAtomicInstNoInstrumentInfo    EQU        $08
  503. kGetAtomicInstOriginalKnobList    EQU        $10
  504. kGetAtomicInstAllKnobs            EQU        $20                    ; return even those that are set to default
  505.  
  506. ;   For non-gm instruments, instrument number of tone description == 0
  507. ;   If you want to speed up while running, slam the inst num with what Get instrument number returns
  508. ;   All missing knobs are slammed to the default value
  509.  
  510.  
  511.  
  512. kSetAtomicInstKeepOriginalInstrument EQU $01
  513. kSetAtomicInstShareAcrossParts    EQU        $02                    ; inst disappears when app goes away
  514. kSetAtomicInstCallerTosses        EQU        $04                    ; the caller isn't keeping a copy around (for NASetAtomicInstrument)
  515. kSetAtomicInstCallerGuarantees    EQU        $08                    ; the caller guarantees a copy is around
  516. kSetAtomicInstInterruptSafe        EQU        $10                    ; dont move memory at this time (but process at next task time)
  517. kSetAtomicInstDontPreprocess    EQU        $80                    ; perform no further preprocessing because either 1)you know the instrument is digitally clean, or 2) you got it from a GetPartAtomic
  518.  
  519. kInstrumentNamesModifiable        EQU        1
  520. kInstrumentNamesBoth            EQU        2
  521. ; * Structures specific to the GenericMusicComponent
  522.  
  523.  
  524.  
  525. kGenericMusicComponentSubtype    EQU        'gene'
  526. GenericKnobDescription    RECORD 0
  527. kd                         ds        KnobDescription ; offset: $0 (0)
  528. hw1                         ds.l    1                ; offset: $54 (84)        ;  driver defined 
  529. hw2                         ds.l    1                ; offset: $58 (88)        ;  driver defined 
  530. hw3                         ds.l    1                ; offset: $5C (92)        ;  driver defined 
  531. settingsID                 ds.l    1                ; offset: $60 (96)        ;  resource ID list for boolean and popup names 
  532. sizeof                     EQU *                    ; size:   $64 (100)
  533.                         ENDR
  534. GenericKnobDescriptionList RECORD 0
  535. knobCount                 ds.l    1                ; offset: $0 (0)
  536. knob                     ds        GenericKnobDescription ; offset: $4 (4) <-- really an array of length one
  537. sizeof                     EQU *                    ; size:   $68 (104)
  538.                         ENDR
  539. ; typedef struct GenericKnobDescriptionList * GenericKnobDescriptionListPtr
  540.  
  541. ; typedef GenericKnobDescriptionListPtr * GenericKnobDescriptionListHandle
  542.  
  543. ;  knobTypes for MusicDerivedSetKnob 
  544.  
  545. kGenericMusicKnob                EQU        1
  546. kGenericMusicInstrumentKnob        EQU        2
  547. kGenericMusicDrumKnob            EQU        3
  548. kGenericMusicGlobalController    EQU        4
  549.  
  550.  
  551.  
  552. kGenericMusicResFirst            EQU        0
  553. kGenericMusicResMiscStringList    EQU        1                    ; STR# 1: synth name, 2:about author,3:aboutcopyright,4:aboutother 
  554. kGenericMusicResMiscLongList    EQU        2                    ; Long various params, see list below 
  555. kGenericMusicResInstrumentList    EQU        3                    ; NmLs of names and shorts, categories prefixed by '••' 
  556. kGenericMusicResDrumList        EQU        4                    ; NmLs of names and shorts 
  557. kGenericMusicResInstrumentKnobDescriptionList EQU 5            ; Knob 
  558. kGenericMusicResDrumKnobDescriptionList EQU 6                ; Knob 
  559. kGenericMusicResKnobDescriptionList EQU    7                    ; Knob 
  560. kGenericMusicResBitsLongList    EQU        8                    ; Long back to back bitmaps of controllers, gminstruments, and drums 
  561. kGenericMusicResModifiableInstrumentHW EQU 9                ; Shrt same as the hw shorts trailing the instrument names, a shortlist 
  562. kGenericMusicResGMTranslation    EQU        10                    ; Long 128 long entries, 1 for each gm inst, of local instrument numbers 1-n (not hw numbers) 
  563. kGenericMusicResROMInstrumentData EQU    11                    ; knob lists for ROM instruments, so the knob values may be known 
  564. kGenericMusicResAboutPICT        EQU        12                    ; picture for aboutlist. must be present for GetAbout call to work 
  565. kGenericMusicResLast            EQU        13
  566. ;  elements of the misc long list 
  567.  
  568. kGenericMusicMiscLongFirst        EQU        0
  569. kGenericMusicMiscLongVoiceCount    EQU        1
  570. kGenericMusicMiscLongPartCount    EQU        2
  571. kGenericMusicMiscLongModifiableInstrumentCount EQU 3
  572. kGenericMusicMiscLongChannelMask EQU    4
  573. kGenericMusicMiscLongDrumPartCount EQU    5
  574. kGenericMusicMiscLongModifiableDrumCount EQU 6
  575. kGenericMusicMiscLongDrumChannelMask EQU 7
  576. kGenericMusicMiscLongOutputCount EQU    8
  577. kGenericMusicMiscLongLatency    EQU        9
  578. kGenericMusicMiscLongFlags        EQU        10
  579. kGenericMusicMiscLongFirstGMHW    EQU        11                    ; number to add to locate GM main instruments 
  580. kGenericMusicMiscLongFirstGMDrumHW EQU    12                    ; number to add to locate GM drumkits 
  581. kGenericMusicMiscLongFirstUserHW EQU    13                    ; First hw number of user instruments (presumed sequential) 
  582. kGenericMusicMiscLongLast        EQU        14
  583. GCPart                    RECORD 0
  584. hwInstrumentNumber         ds.l    1                ; offset: $0 (0)        ;  internal number of recalled instrument 
  585. controller                 ds.w    128                ; offset: $4 (4)        ;  current values for all controllers 
  586. volume                     ds.l    1                ; offset: $104 (260)    ;  ctrl 7 is special case 
  587. polyphony                 ds.l    1                ; offset: $108 (264)
  588. midiChannel                 ds.l    1                ; offset: $10C (268)    ;  1-16 if in use 
  589. id                         ds        GCInstrumentData ; offset: $110 (272)    ;  ToneDescription & knoblist, uncertain length 
  590. sizeof                     EQU *                    ; size:   $164 (356)
  591.                         ENDR
  592. ; * Calls specific to the GenericMusicComponent
  593.  
  594.  
  595. kMusicGenericRange                EQU        $0100
  596. kMusicDerivedRange                EQU        $0200
  597. ; * Flags in GenericMusicConfigure call
  598.  
  599.  
  600. kGenericMusicDoMIDI                EQU        $01                    ; implement normal MIDI messages for note, controllers, and program changes 0-127 
  601. kGenericMusicBank0                EQU        $02                    ; implement instrument bank changes on controller 0 
  602. kGenericMusicBank32                EQU        $04                    ; implement instrument bank changes on controller 32 
  603. kGenericMusicErsatzMIDI            EQU        $08                    ; construct MIDI packets, but send them to the derived component 
  604. kGenericMusicCallKnobs            EQU        $10                    ; call the derived component with special knob format call 
  605. kGenericMusicCallParts            EQU        $20                    ; call the derived component with special part format call 
  606. kGenericMusicCallInstrument        EQU        $40                    ; call MusicDerivedSetInstrument for MusicSetInstrument calls 
  607. kGenericMusicCallNumber            EQU        $80                    ; call MusicDerivedSetPartInstrumentNumber for MusicSetPartInstrumentNumber calls, & don't send any C0 or bank stuff 
  608. kGenericMusicCallROMInstrument    EQU        $0100                ; call MusicSetInstrument for MusicSetPartInstrumentNumber for "ROM" instruments, passing params from the ROMi resource 
  609. kGenericMusicAllDefaults        EQU        $0200                ; indicates that when a new instrument is recalled, all knobs are reset to DEFAULT settings. True for GS modules 
  610.  
  611.  
  612.  
  613.  
  614. OfflineSampleType        RECORD 0
  615. numChannels                 ds.l    1                ; offset: $0 (0)        ; number of channels,  ie mono = 1
  616. sampleRate                 ds.l    1                ; offset: $4 (4)        ; sample rate in Apples Fixed point representation
  617. sampleSize                 ds.w    1                ; offset: $8 (8)        ; number of bits in sample
  618. sizeof                     EQU *                    ; size:   $A (10)
  619.                         ENDR
  620. InstrumentInfoRecord    RECORD 0
  621. instrumentNumber         ds.l    1                ; offset: $0 (0)        ;  instrument number (if 0, name is a catagory)
  622. flags                     ds.l    1                ; offset: $4 (4)        ;  show in picker, etc.
  623. toneNameIndex             ds.l    1                ; offset: $8 (8)        ;  index in toneNames (1 based)
  624. itxtNameAtomID             ds.l    1                ; offset: $C (12)        ;  index in itxtNames (itxt/name by index)
  625. sizeof                     EQU *                    ; size:   $10 (16)
  626.                         ENDR
  627. InstrumentInfoList        RECORD 0
  628. recordCount                 ds.l    1                ; offset: $0 (0)
  629. toneNames                 ds.l    1                ; offset: $4 (4)        ;  name from tone description
  630. itxtNames                 ds.l    1                ; offset: $8 (8)        ;  itxt/name atoms for instruments
  631. info                     ds        InstrumentInfoRecord ; offset: $C (12) <-- really an array of length one
  632. sizeof                     EQU *                    ; size:   $1C (28)
  633.                         ENDR
  634. ; typedef struct InstrumentInfoList *    InstrumentInfoListPtr
  635.  
  636. ; typedef InstrumentInfoListPtr *        InstrumentInfoListHandle
  637.  
  638. ;
  639. ; pascal ComponentResult MusicGetDescription(MusicComponent mc, SynthesizerDescription *sd)
  640. ;
  641.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  642.         Macro
  643.         _MusicGetDescription
  644.             move.l              #$00040001,-(sp)
  645.             moveq               #0,D0
  646.             dc.w                $A82A
  647.         EndM
  648.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  649.         IMPORT_CFM_FUNCTION MusicGetDescription
  650.     ENDIF
  651.  
  652. ;
  653. ; pascal ComponentResult MusicGetPart(MusicComponent mc, long part, long *midiChannel, long *polyphony)
  654. ;
  655.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  656.         Macro
  657.         _MusicGetPart
  658.             move.l              #$000C0002,-(sp)
  659.             moveq               #0,D0
  660.             dc.w                $A82A
  661.         EndM
  662.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  663.         IMPORT_CFM_FUNCTION MusicGetPart
  664.     ENDIF
  665.  
  666. ;
  667. ; pascal ComponentResult MusicSetPart(MusicComponent mc, long part, long midiChannel, long polyphony)
  668. ;
  669.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  670.         Macro
  671.         _MusicSetPart
  672.             move.l              #$000C0003,-(sp)
  673.             moveq               #0,D0
  674.             dc.w                $A82A
  675.         EndM
  676.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  677.         IMPORT_CFM_FUNCTION MusicSetPart
  678.     ENDIF
  679.  
  680. ;
  681. ; pascal ComponentResult MusicSetPartInstrumentNumber(MusicComponent mc, long part, long instrumentNumber)
  682. ;
  683.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  684.         Macro
  685.         _MusicSetPartInstrumentNumber
  686.             move.l              #$00080004,-(sp)
  687.             moveq               #0,D0
  688.             dc.w                $A82A
  689.         EndM
  690.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  691.         IMPORT_CFM_FUNCTION MusicSetPartInstrumentNumber
  692.     ENDIF
  693.  
  694.  
  695. ;
  696. ; pascal ComponentResult MusicGetPartInstrumentNumber(MusicComponent mc, long part)
  697. ;
  698.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  699.         Macro
  700.         _MusicGetPartInstrumentNumber
  701.             move.l              #$00040005,-(sp)
  702.             moveq               #0,D0
  703.             dc.w                $A82A
  704.         EndM
  705.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  706.         IMPORT_CFM_FUNCTION MusicGetPartInstrumentNumber
  707.     ENDIF
  708.  
  709. ;
  710. ; pascal ComponentResult MusicStorePartInstrument(MusicComponent mc, long part, long instrumentNumber)
  711. ;
  712.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  713.         Macro
  714.         _MusicStorePartInstrument
  715.             move.l              #$00080006,-(sp)
  716.             moveq               #0,D0
  717.             dc.w                $A82A
  718.         EndM
  719.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  720.         IMPORT_CFM_FUNCTION MusicStorePartInstrument
  721.     ENDIF
  722.  
  723.  
  724. ;
  725. ; pascal ComponentResult MusicGetPartAtomicInstrument(MusicComponent mc, long part, AtomicInstrument *ai, long flags)
  726. ;
  727.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  728.         Macro
  729.         _MusicGetPartAtomicInstrument
  730.             move.l              #$000C0009,-(sp)
  731.             moveq               #0,D0
  732.             dc.w                $A82A
  733.         EndM
  734.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  735.         IMPORT_CFM_FUNCTION MusicGetPartAtomicInstrument
  736.     ENDIF
  737.  
  738. ;
  739. ; pascal ComponentResult MusicSetPartAtomicInstrument(MusicComponent mc, long part, AtomicInstrumentPtr aiP, long flags)
  740. ;
  741.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  742.         Macro
  743.         _MusicSetPartAtomicInstrument
  744.             move.l              #$000C000A,-(sp)
  745.             moveq               #0,D0
  746.             dc.w                $A82A
  747.         EndM
  748.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  749.         IMPORT_CFM_FUNCTION MusicSetPartAtomicInstrument
  750.     ENDIF
  751.  
  752.  
  753. ;  Obsolete calls
  754. ;
  755. ; pascal ComponentResult MusicGetInstrumentKnobDescriptionObsolete(MusicComponent mc, long knobIndex, void *mkd)
  756. ;
  757.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  758.         Macro
  759.         _MusicGetInstrumentKnobDescriptionObsolete
  760.             move.l              #$0008000D,-(sp)
  761.             moveq               #0,D0
  762.             dc.w                $A82A
  763.         EndM
  764.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  765.         IMPORT_CFM_FUNCTION MusicGetInstrumentKnobDescriptionObsolete
  766.     ENDIF
  767.  
  768. ;
  769. ; pascal ComponentResult MusicGetDrumKnobDescriptionObsolete(MusicComponent mc, long knobIndex, void *mkd)
  770. ;
  771.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  772.         Macro
  773.         _MusicGetDrumKnobDescriptionObsolete
  774.             move.l              #$0008000E,-(sp)
  775.             moveq               #0,D0
  776.             dc.w                $A82A
  777.         EndM
  778.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  779.         IMPORT_CFM_FUNCTION MusicGetDrumKnobDescriptionObsolete
  780.     ENDIF
  781.  
  782. ;
  783. ; pascal ComponentResult MusicGetKnobDescriptionObsolete(MusicComponent mc, long knobIndex, void *mkd)
  784. ;
  785.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  786.         Macro
  787.         _MusicGetKnobDescriptionObsolete
  788.             move.l              #$0008000F,-(sp)
  789.             moveq               #0,D0
  790.             dc.w                $A82A
  791.         EndM
  792.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  793.         IMPORT_CFM_FUNCTION MusicGetKnobDescriptionObsolete
  794.     ENDIF
  795.  
  796. ;
  797. ; pascal ComponentResult MusicGetPartKnob(MusicComponent mc, long part, long knobID)
  798. ;
  799.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  800.         Macro
  801.         _MusicGetPartKnob
  802.             move.l              #$00080010,-(sp)
  803.             moveq               #0,D0
  804.             dc.w                $A82A
  805.         EndM
  806.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  807.         IMPORT_CFM_FUNCTION MusicGetPartKnob
  808.     ENDIF
  809.  
  810. ;
  811. ; pascal ComponentResult MusicSetPartKnob(MusicComponent mc, long part, long knobID, long knobValue)
  812. ;
  813.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  814.         Macro
  815.         _MusicSetPartKnob
  816.             move.l              #$000C0011,-(sp)
  817.             moveq               #0,D0
  818.             dc.w                $A82A
  819.         EndM
  820.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  821.         IMPORT_CFM_FUNCTION MusicSetPartKnob
  822.     ENDIF
  823.  
  824. ;
  825. ; pascal ComponentResult MusicGetKnob(MusicComponent mc, long knobID)
  826. ;
  827.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  828.         Macro
  829.         _MusicGetKnob
  830.             move.l              #$00040012,-(sp)
  831.             moveq               #0,D0
  832.             dc.w                $A82A
  833.         EndM
  834.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  835.         IMPORT_CFM_FUNCTION MusicGetKnob
  836.     ENDIF
  837.  
  838. ;
  839. ; pascal ComponentResult MusicSetKnob(MusicComponent mc, long knobID, long knobValue)
  840. ;
  841.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  842.         Macro
  843.         _MusicSetKnob
  844.             move.l              #$00080013,-(sp)
  845.             moveq               #0,D0
  846.             dc.w                $A82A
  847.         EndM
  848.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  849.         IMPORT_CFM_FUNCTION MusicSetKnob
  850.     ENDIF
  851.  
  852. ;
  853. ; pascal ComponentResult MusicGetPartName(MusicComponent mc, long part, StringPtr name)
  854. ;
  855.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  856.         Macro
  857.         _MusicGetPartName
  858.             move.l              #$00080014,-(sp)
  859.             moveq               #0,D0
  860.             dc.w                $A82A
  861.         EndM
  862.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  863.         IMPORT_CFM_FUNCTION MusicGetPartName
  864.     ENDIF
  865.  
  866. ;
  867. ; pascal ComponentResult MusicSetPartName(MusicComponent mc, long part, StringPtr name)
  868. ;
  869.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  870.         Macro
  871.         _MusicSetPartName
  872.             move.l              #$00080015,-(sp)
  873.             moveq               #0,D0
  874.             dc.w                $A82A
  875.         EndM
  876.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  877.         IMPORT_CFM_FUNCTION MusicSetPartName
  878.     ENDIF
  879.  
  880. ;
  881. ; pascal ComponentResult MusicFindTone(MusicComponent mc, ToneDescription *td, long *libraryIndexOut, unsigned long *fit)
  882. ;
  883.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  884.         Macro
  885.         _MusicFindTone
  886.             move.l              #$000C0016,-(sp)
  887.             moveq               #0,D0
  888.             dc.w                $A82A
  889.         EndM
  890.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  891.         IMPORT_CFM_FUNCTION MusicFindTone
  892.     ENDIF
  893.  
  894. ;
  895. ; pascal ComponentResult MusicPlayNote(MusicComponent mc, long part, long pitch, long velocity)
  896. ;
  897.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  898.         Macro
  899.         _MusicPlayNote
  900.             move.l              #$000C0017,-(sp)
  901.             moveq               #0,D0
  902.             dc.w                $A82A
  903.         EndM
  904.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  905.         IMPORT_CFM_FUNCTION MusicPlayNote
  906.     ENDIF
  907.  
  908. ;
  909. ; pascal ComponentResult MusicResetPart(MusicComponent mc, long part)
  910. ;
  911.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  912.         Macro
  913.         _MusicResetPart
  914.             move.l              #$00040018,-(sp)
  915.             moveq               #0,D0
  916.             dc.w                $A82A
  917.         EndM
  918.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  919.         IMPORT_CFM_FUNCTION MusicResetPart
  920.     ENDIF
  921.  
  922. ;
  923. ; pascal ComponentResult MusicSetPartController(MusicComponent mc, long part, MusicController controllerNumber, long controllerValue)
  924. ;
  925.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  926.         Macro
  927.         _MusicSetPartController
  928.             move.l              #$000C0019,-(sp)
  929.             moveq               #0,D0
  930.             dc.w                $A82A
  931.         EndM
  932.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  933.         IMPORT_CFM_FUNCTION MusicSetPartController
  934.     ENDIF
  935.  
  936.  
  937. ;
  938. ; pascal ComponentResult MusicGetPartController(MusicComponent mc, long part, MusicController controllerNumber)
  939. ;
  940.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  941.         Macro
  942.         _MusicGetPartController
  943.             move.l              #$0008001A,-(sp)
  944.             moveq               #0,D0
  945.             dc.w                $A82A
  946.         EndM
  947.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  948.         IMPORT_CFM_FUNCTION MusicGetPartController
  949.     ENDIF
  950.  
  951. ;
  952. ; pascal ComponentResult MusicGetMIDIProc(MusicComponent mc, MusicMIDISendUPP *midiSendProc, long *refCon)
  953. ;
  954.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  955.         Macro
  956.         _MusicGetMIDIProc
  957.             move.l              #$0008001B,-(sp)
  958.             moveq               #0,D0
  959.             dc.w                $A82A
  960.         EndM
  961.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  962.         IMPORT_CFM_FUNCTION MusicGetMIDIProc
  963.     ENDIF
  964.  
  965. ;
  966. ; pascal ComponentResult MusicSetMIDIProc(MusicComponent mc, MusicMIDISendUPP midiSendProc, long refCon)
  967. ;
  968.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  969.         Macro
  970.         _MusicSetMIDIProc
  971.             move.l              #$0008001C,-(sp)
  972.             moveq               #0,D0
  973.             dc.w                $A82A
  974.         EndM
  975.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  976.         IMPORT_CFM_FUNCTION MusicSetMIDIProc
  977.     ENDIF
  978.  
  979. ;
  980. ; pascal ComponentResult MusicGetInstrumentNames(MusicComponent mc, long modifiableInstruments, Handle *instrumentNames, Handle *instrumentCategoryLasts, Handle *instrumentCategoryNames)
  981. ;
  982.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  983.         Macro
  984.         _MusicGetInstrumentNames
  985.             move.l              #$0010001D,-(sp)
  986.             moveq               #0,D0
  987.             dc.w                $A82A
  988.         EndM
  989.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  990.         IMPORT_CFM_FUNCTION MusicGetInstrumentNames
  991.     ENDIF
  992.  
  993. ;
  994. ; pascal ComponentResult MusicGetDrumNames(MusicComponent mc, long modifiableInstruments, Handle *instrumentNumbers, Handle *instrumentNames)
  995. ;
  996.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  997.         Macro
  998.         _MusicGetDrumNames
  999.             move.l              #$000C001E,-(sp)
  1000.             moveq               #0,D0
  1001.             dc.w                $A82A
  1002.         EndM
  1003.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1004.         IMPORT_CFM_FUNCTION MusicGetDrumNames
  1005.     ENDIF
  1006.  
  1007. ;
  1008. ; pascal ComponentResult MusicGetMasterTune(MusicComponent mc)
  1009. ;
  1010.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1011.         Macro
  1012.         _MusicGetMasterTune
  1013.             move.l              #$0000001F,-(sp)
  1014.             moveq               #0,D0
  1015.             dc.w                $A82A
  1016.         EndM
  1017.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1018.         IMPORT_CFM_FUNCTION MusicGetMasterTune
  1019.     ENDIF
  1020.  
  1021. ;
  1022. ; pascal ComponentResult MusicSetMasterTune(MusicComponent mc, long masterTune)
  1023. ;
  1024.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1025.         Macro
  1026.         _MusicSetMasterTune
  1027.             move.l              #$00040020,-(sp)
  1028.             moveq               #0,D0
  1029.             dc.w                $A82A
  1030.         EndM
  1031.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1032.         IMPORT_CFM_FUNCTION MusicSetMasterTune
  1033.     ENDIF
  1034.  
  1035.  
  1036. ;
  1037. ; pascal ComponentResult MusicGetInstrumentAboutInfo(MusicComponent mc, long part, InstrumentAboutInfo *iai)
  1038. ;
  1039.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1040.         Macro
  1041.         _MusicGetInstrumentAboutInfo
  1042.             move.l              #$00080022,-(sp)
  1043.             moveq               #0,D0
  1044.             dc.w                $A82A
  1045.         EndM
  1046.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1047.         IMPORT_CFM_FUNCTION MusicGetInstrumentAboutInfo
  1048.     ENDIF
  1049.  
  1050. ;
  1051. ; pascal ComponentResult MusicGetDeviceConnection(MusicComponent mc, long index, long *id1, long *id2)
  1052. ;
  1053.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1054.         Macro
  1055.         _MusicGetDeviceConnection
  1056.             move.l              #$000C0023,-(sp)
  1057.             moveq               #0,D0
  1058.             dc.w                $A82A
  1059.         EndM
  1060.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1061.         IMPORT_CFM_FUNCTION MusicGetDeviceConnection
  1062.     ENDIF
  1063.  
  1064. ;
  1065. ; pascal ComponentResult MusicUseDeviceConnection(MusicComponent mc, long id1, long id2)
  1066. ;
  1067.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1068.         Macro
  1069.         _MusicUseDeviceConnection
  1070.             move.l              #$00080024,-(sp)
  1071.             moveq               #0,D0
  1072.             dc.w                $A82A
  1073.         EndM
  1074.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1075.         IMPORT_CFM_FUNCTION MusicUseDeviceConnection
  1076.     ENDIF
  1077.  
  1078. ;
  1079. ; pascal ComponentResult MusicGetKnobSettingStrings(MusicComponent mc, long knobIndex, long isGlobal, Handle *settingsNames, Handle *settingsCategoryLasts, Handle *settingsCategoryNames)
  1080. ;
  1081.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1082.         Macro
  1083.         _MusicGetKnobSettingStrings
  1084.             move.l              #$00140025,-(sp)
  1085.             moveq               #0,D0
  1086.             dc.w                $A82A
  1087.         EndM
  1088.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1089.         IMPORT_CFM_FUNCTION MusicGetKnobSettingStrings
  1090.     ENDIF
  1091.  
  1092. ;
  1093. ; pascal ComponentResult MusicGetMIDIPorts(MusicComponent mc, long *inputPortCount, long *outputPortCount)
  1094. ;
  1095.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1096.         Macro
  1097.         _MusicGetMIDIPorts
  1098.             move.l              #$00080026,-(sp)
  1099.             moveq               #0,D0
  1100.             dc.w                $A82A
  1101.         EndM
  1102.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1103.         IMPORT_CFM_FUNCTION MusicGetMIDIPorts
  1104.     ENDIF
  1105.  
  1106. ;
  1107. ; pascal ComponentResult MusicSendMIDI(MusicComponent mc, long portIndex, MusicMIDIPacket *mp)
  1108. ;
  1109.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1110.         Macro
  1111.         _MusicSendMIDI
  1112.             move.l              #$00080027,-(sp)
  1113.             moveq               #0,D0
  1114.             dc.w                $A82A
  1115.         EndM
  1116.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1117.         IMPORT_CFM_FUNCTION MusicSendMIDI
  1118.     ENDIF
  1119.  
  1120. ;
  1121. ; pascal ComponentResult MusicReceiveMIDI(MusicComponent mc, MusicMIDIReadHookUPP readHook, long refCon)
  1122. ;
  1123.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1124.         Macro
  1125.         _MusicReceiveMIDI
  1126.             move.l              #$00080028,-(sp)
  1127.             moveq               #0,D0
  1128.             dc.w                $A82A
  1129.         EndM
  1130.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1131.         IMPORT_CFM_FUNCTION MusicReceiveMIDI
  1132.     ENDIF
  1133.  
  1134. ;
  1135. ; pascal ComponentResult MusicStartOffline(MusicComponent mc, unsigned long *numChannels, UnsignedFixed *sampleRate, unsigned short *sampleSize, MusicOfflineDataUPP dataProc, long dataProcRefCon)
  1136. ;
  1137.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1138.         Macro
  1139.         _MusicStartOffline
  1140.             move.l              #$00140029,-(sp)
  1141.             moveq               #0,D0
  1142.             dc.w                $A82A
  1143.         EndM
  1144.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1145.         IMPORT_CFM_FUNCTION MusicStartOffline
  1146.     ENDIF
  1147.  
  1148. ;
  1149. ; pascal ComponentResult MusicSetOfflineTimeTo(MusicComponent mc, long newTimeStamp)
  1150. ;
  1151.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1152.         Macro
  1153.         _MusicSetOfflineTimeTo
  1154.             move.l              #$0004002A,-(sp)
  1155.             moveq               #0,D0
  1156.             dc.w                $A82A
  1157.         EndM
  1158.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1159.         IMPORT_CFM_FUNCTION MusicSetOfflineTimeTo
  1160.     ENDIF
  1161.  
  1162. ;
  1163. ; pascal ComponentResult MusicGetInstrumentKnobDescription(MusicComponent mc, long knobIndex, KnobDescription *mkd)
  1164. ;
  1165.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1166.         Macro
  1167.         _MusicGetInstrumentKnobDescription
  1168.             move.l              #$0008002B,-(sp)
  1169.             moveq               #0,D0
  1170.             dc.w                $A82A
  1171.         EndM
  1172.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1173.         IMPORT_CFM_FUNCTION MusicGetInstrumentKnobDescription
  1174.     ENDIF
  1175.  
  1176. ;
  1177. ; pascal ComponentResult MusicGetDrumKnobDescription(MusicComponent mc, long knobIndex, KnobDescription *mkd)
  1178. ;
  1179.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1180.         Macro
  1181.         _MusicGetDrumKnobDescription
  1182.             move.l              #$0008002C,-(sp)
  1183.             moveq               #0,D0
  1184.             dc.w                $A82A
  1185.         EndM
  1186.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1187.         IMPORT_CFM_FUNCTION MusicGetDrumKnobDescription
  1188.     ENDIF
  1189.  
  1190. ;
  1191. ; pascal ComponentResult MusicGetKnobDescription(MusicComponent mc, long knobIndex, KnobDescription *mkd)
  1192. ;
  1193.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1194.         Macro
  1195.         _MusicGetKnobDescription
  1196.             move.l              #$0008002D,-(sp)
  1197.             moveq               #0,D0
  1198.             dc.w                $A82A
  1199.         EndM
  1200.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1201.         IMPORT_CFM_FUNCTION MusicGetKnobDescription
  1202.     ENDIF
  1203.  
  1204. ;
  1205. ; pascal ComponentResult MusicGetInfoText(MusicComponent mc, long selector, Handle *textH, Handle *styleH)
  1206. ;
  1207.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1208.         Macro
  1209.         _MusicGetInfoText
  1210.             move.l              #$000C002E,-(sp)
  1211.             moveq               #0,D0
  1212.             dc.w                $A82A
  1213.         EndM
  1214.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1215.         IMPORT_CFM_FUNCTION MusicGetInfoText
  1216.     ENDIF
  1217.  
  1218.  
  1219. kGetInstrumentInfoNoBuiltIn        EQU        $01
  1220. kGetInstrumentInfoMidiUserInst    EQU        $02
  1221. kGetInstrumentInfoNoIText        EQU        $04
  1222. ;
  1223. ; pascal ComponentResult MusicGetInstrumentInfo(MusicComponent mc, long getInstrumentInfoFlags, InstrumentInfoListHandle *infoListH)
  1224. ;
  1225.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1226.         Macro
  1227.         _MusicGetInstrumentInfo
  1228.             move.l              #$0008002F,-(sp)
  1229.             moveq               #0,D0
  1230.             dc.w                $A82A
  1231.         EndM
  1232.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1233.         IMPORT_CFM_FUNCTION MusicGetInstrumentInfo
  1234.     ENDIF
  1235.  
  1236.  
  1237.  
  1238.  
  1239. ;
  1240. ; pascal ComponentResult MusicTask(MusicComponent mc)
  1241. ;
  1242.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1243.         Macro
  1244.         _MusicTask
  1245.             move.l              #$00000031,-(sp)
  1246.             moveq               #0,D0
  1247.             dc.w                $A82A
  1248.         EndM
  1249.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1250.         IMPORT_CFM_FUNCTION MusicTask
  1251.     ENDIF
  1252.  
  1253. ;
  1254. ; pascal ComponentResult MusicSetPartInstrumentNumberInterruptSafe(MusicComponent mc, long part, long instrumentNumber)
  1255. ;
  1256.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1257.         Macro
  1258.         _MusicSetPartInstrumentNumberInterruptSafe
  1259.             move.l              #$00080032,-(sp)
  1260.             moveq               #0,D0
  1261.             dc.w                $A82A
  1262.         EndM
  1263.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1264.         IMPORT_CFM_FUNCTION MusicSetPartInstrumentNumberInterruptSafe
  1265.     ENDIF
  1266.  
  1267. ;
  1268. ; pascal ComponentResult MusicSetPartSoundLocalization(MusicComponent mc, long part, Handle data)
  1269. ;
  1270.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1271.         Macro
  1272.         _MusicSetPartSoundLocalization
  1273.             move.l              #$00080033,-(sp)
  1274.             moveq               #0,D0
  1275.             dc.w                $A82A
  1276.         EndM
  1277.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1278.         IMPORT_CFM_FUNCTION MusicSetPartSoundLocalization
  1279.     ENDIF
  1280.  
  1281. ;
  1282. ; pascal ComponentResult MusicGenericConfigure(MusicComponent mc, long mode, long flags, long baseResID)
  1283. ;
  1284.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1285.         Macro
  1286.         _MusicGenericConfigure
  1287.             move.l              #$000C0100,-(sp)
  1288.             moveq               #0,D0
  1289.             dc.w                $A82A
  1290.         EndM
  1291.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1292.         IMPORT_CFM_FUNCTION MusicGenericConfigure
  1293.     ENDIF
  1294.  
  1295. ;
  1296. ; pascal ComponentResult MusicGenericGetPart(MusicComponent mc, long partNumber, GCPart **part)
  1297. ;
  1298.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1299.         Macro
  1300.         _MusicGenericGetPart
  1301.             move.l              #$00080101,-(sp)
  1302.             moveq               #0,D0
  1303.             dc.w                $A82A
  1304.         EndM
  1305.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1306.         IMPORT_CFM_FUNCTION MusicGenericGetPart
  1307.     ENDIF
  1308.  
  1309. ;
  1310. ; pascal ComponentResult MusicGenericGetKnobList(MusicComponent mc, long knobType, GenericKnobDescriptionListHandle *gkdlH)
  1311. ;
  1312.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1313.         Macro
  1314.         _MusicGenericGetKnobList
  1315.             move.l              #$00080102,-(sp)
  1316.             moveq               #0,D0
  1317.             dc.w                $A82A
  1318.         EndM
  1319.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1320.         IMPORT_CFM_FUNCTION MusicGenericGetKnobList
  1321.     ENDIF
  1322.  
  1323. ;
  1324. ; pascal ComponentResult MusicGenericSetResourceNumbers(MusicComponent mc, Handle resourceIDH)
  1325. ;
  1326.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1327.         Macro
  1328.         _MusicGenericSetResourceNumbers
  1329.             move.l              #$00040103,-(sp)
  1330.             moveq               #0,D0
  1331.             dc.w                $A82A
  1332.         EndM
  1333.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1334.         IMPORT_CFM_FUNCTION MusicGenericSetResourceNumbers
  1335.     ENDIF
  1336.  
  1337. ;
  1338. ; pascal ComponentResult MusicDerivedMIDISend(MusicComponent mc, MusicMIDIPacket *packet)
  1339. ;
  1340.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1341.         Macro
  1342.         _MusicDerivedMIDISend
  1343.             move.l              #$00040200,-(sp)
  1344.             moveq               #0,D0
  1345.             dc.w                $A82A
  1346.         EndM
  1347.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1348.         IMPORT_CFM_FUNCTION MusicDerivedMIDISend
  1349.     ENDIF
  1350.  
  1351. ;
  1352. ; pascal ComponentResult MusicDerivedSetKnob(MusicComponent mc, long knobType, long knobNumber, long knobValue, long partNumber, GCPart *p, GenericKnobDescription *gkd)
  1353. ;
  1354.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1355.         Macro
  1356.         _MusicDerivedSetKnob
  1357.             move.l              #$00180201,-(sp)
  1358.             moveq               #0,D0
  1359.             dc.w                $A82A
  1360.         EndM
  1361.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1362.         IMPORT_CFM_FUNCTION MusicDerivedSetKnob
  1363.     ENDIF
  1364.  
  1365. ;
  1366. ; pascal ComponentResult MusicDerivedSetPart(MusicComponent mc, long partNumber, GCPart *p)
  1367. ;
  1368.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1369.         Macro
  1370.         _MusicDerivedSetPart
  1371.             move.l              #$00080202,-(sp)
  1372.             moveq               #0,D0
  1373.             dc.w                $A82A
  1374.         EndM
  1375.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1376.         IMPORT_CFM_FUNCTION MusicDerivedSetPart
  1377.     ENDIF
  1378.  
  1379. ;
  1380. ; pascal ComponentResult MusicDerivedSetInstrument(MusicComponent mc, long partNumber, GCPart *p)
  1381. ;
  1382.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1383.         Macro
  1384.         _MusicDerivedSetInstrument
  1385.             move.l              #$00080203,-(sp)
  1386.             moveq               #0,D0
  1387.             dc.w                $A82A
  1388.         EndM
  1389.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1390.         IMPORT_CFM_FUNCTION MusicDerivedSetInstrument
  1391.     ENDIF
  1392.  
  1393. ;
  1394. ; pascal ComponentResult MusicDerivedSetPartInstrumentNumber(MusicComponent mc, long partNumber, GCPart *p)
  1395. ;
  1396.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1397.         Macro
  1398.         _MusicDerivedSetPartInstrumentNumber
  1399.             move.l              #$00080204,-(sp)
  1400.             moveq               #0,D0
  1401.             dc.w                $A82A
  1402.         EndM
  1403.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1404.         IMPORT_CFM_FUNCTION MusicDerivedSetPartInstrumentNumber
  1405.     ENDIF
  1406.  
  1407. ;
  1408. ; pascal ComponentResult MusicDerivedSetMIDI(MusicComponent mc, MusicMIDISendUPP midiProc, long refcon, long midiChannel)
  1409. ;
  1410.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1411.         Macro
  1412.         _MusicDerivedSetMIDI
  1413.             move.l              #$000C0205,-(sp)
  1414.             moveq               #0,D0
  1415.             dc.w                $A82A
  1416.         EndM
  1417.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1418.         IMPORT_CFM_FUNCTION MusicDerivedSetMIDI
  1419.     ENDIF
  1420.  
  1421. ;
  1422. ; pascal ComponentResult MusicDerivedStorePartInstrument(MusicComponent mc, long partNumber, GCPart *p, long instrumentNumber)
  1423. ;
  1424.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1425.         Macro
  1426.         _MusicDerivedStorePartInstrument
  1427.             move.l              #$000C0206,-(sp)
  1428.             moveq               #0,D0
  1429.             dc.w                $A82A
  1430.         EndM
  1431.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1432.         IMPORT_CFM_FUNCTION MusicDerivedStorePartInstrument
  1433.     ENDIF
  1434.  
  1435. ;
  1436. ; pascal ComponentResult MusicDerivedOpenResFile(MusicComponent mc)
  1437. ;
  1438.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1439.         Macro
  1440.         _MusicDerivedOpenResFile
  1441.             move.l              #$00000207,-(sp)
  1442.             moveq               #0,D0
  1443.             dc.w                $A82A
  1444.         EndM
  1445.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1446.         IMPORT_CFM_FUNCTION MusicDerivedOpenResFile
  1447.     ENDIF
  1448.  
  1449. ;
  1450. ; pascal ComponentResult MusicDerivedCloseResFile(MusicComponent mc, short resRefNum)
  1451. ;
  1452.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1453.         Macro
  1454.         _MusicDerivedCloseResFile
  1455.             move.l              #$00020208,-(sp)
  1456.             moveq               #0,D0
  1457.             dc.w                $A82A
  1458.         EndM
  1459.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1460.         IMPORT_CFM_FUNCTION MusicDerivedCloseResFile
  1461.     ENDIF
  1462.  
  1463.  
  1464.  
  1465.  
  1466.  
  1467.  
  1468. ;  Mask bit for returned value by InstrumentFind.
  1469.  
  1470. kInstrumentExactMatch            EQU        $00020000
  1471. kInstrumentRecommendedSubstitute EQU    $00010000
  1472. kInstrumentQualityField            EQU        $FF000000
  1473. kInstrumentRoland8BitQuality    EQU        $05000000
  1474. ; typedef struct InstrumentAboutInfo *    InstrumentAboutInfoPtr
  1475.  
  1476. ; typedef InstrumentAboutInfoPtr *        InstrumentAboutInfoHandle
  1477.  
  1478. GMInstrumentInfo        RECORD 0
  1479. cmpInstID                 ds.l    1                ; offset: $0 (0)
  1480. gmInstNum                 ds.l    1                ; offset: $4 (4)
  1481. instMatch                 ds.l    1                ; offset: $8 (8)
  1482. sizeof                     EQU *                    ; size:   $C (12)
  1483.                         ENDR
  1484. ; typedef struct GMInstrumentInfo *        GMInstrumentInfoPtr
  1485.  
  1486. ; typedef GMInstrumentInfoPtr *            GMInstrumentInfoHandle
  1487.  
  1488. nonGMInstrumentInfoRecord RECORD 0
  1489. cmpInstID                 ds.l    1                ; offset: $0 (0)        ;  if 0, category name
  1490. flags                     ds.l    1                ; offset: $4 (4)        ;  match, show in picker
  1491. toneNameIndex             ds.l    1                ; offset: $8 (8)        ;  index in toneNames (1 based)
  1492. itxtNameAtomID             ds.l    1                ; offset: $C (12)        ;  index in itxtNames (itxt/name by index)
  1493. sizeof                     EQU *                    ; size:   $10 (16)
  1494.                         ENDR
  1495. nonGMInstrumentInfo        RECORD 0
  1496. recordCount                 ds.l    1                ; offset: $0 (0)
  1497. toneNames                 ds.l    1                ; offset: $4 (4)        ;  name from tone description
  1498. itxtNames                 ds.l    1                ; offset: $8 (8)        ;  itext/name atoms for instruments
  1499. instInfo                 ds        nonGMInstrumentInfoRecord ; offset: $C (12) <-- really an array of length one
  1500. sizeof                     EQU *                    ; size:   $1C (28)
  1501.                         ENDR
  1502. ; typedef struct nonGMInstrumentInfo *    nonGMInstrumentInfoPtr
  1503.  
  1504. ; typedef nonGMInstrumentInfoPtr *        nonGMInstrumentInfoHandle
  1505.  
  1506. InstCompInfo            RECORD 0
  1507. infoSize                 ds.l    1                ; offset: $0 (0)        ;  size of this record
  1508. InstrumentLibraryName     ds        Str31            ; offset: $4 (4)
  1509. InstrumentLibraryITxt     ds.l    1                ; offset: $24 (36)        ;  itext/name atoms for instruments
  1510. GMinstrumentCount         ds.l    1                ; offset: $28 (40)
  1511. GMinstrumentInfo         ds.l    1                ; offset: $2C (44)
  1512. GMdrumCount                 ds.l    1                ; offset: $30 (48)
  1513. GMdrumInfo                 ds.l    1                ; offset: $34 (52)
  1514. nonGMinstrumentCount     ds.l    1                ; offset: $38 (56)
  1515. nonGMinstrumentInfo         ds.l    1                ; offset: $3C (60)
  1516. sizeof                     EQU *                    ; size:   $40 (64)
  1517.                         ENDR
  1518. ; typedef struct InstCompInfo *            InstCompInfoPtr
  1519.  
  1520. ; typedef InstCompInfoPtr *                InstCompInfoHandle
  1521.  
  1522. ;
  1523. ; pascal ComponentResult InstrumentGetInst(ComponentInstance ci, long instID, AtomicInstrument *atomicInst, long flags)
  1524. ;
  1525.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1526.         Macro
  1527.         _InstrumentGetInst
  1528.             move.l              #$000C0001,-(sp)
  1529.             moveq               #0,D0
  1530.             dc.w                $A82A
  1531.         EndM
  1532.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1533.         IMPORT_CFM_FUNCTION InstrumentGetInst
  1534.     ENDIF
  1535.  
  1536. ;
  1537. ; pascal ComponentResult InstrumentGetInfo(ComponentInstance ci, long getInstrumentInfoFlags, InstCompInfoHandle *instInfo)
  1538. ;
  1539.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1540.         Macro
  1541.         _InstrumentGetInfo
  1542.             move.l              #$00080002,-(sp)
  1543.             moveq               #0,D0
  1544.             dc.w                $A82A
  1545.         EndM
  1546.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1547.         IMPORT_CFM_FUNCTION InstrumentGetInfo
  1548.     ENDIF
  1549.  
  1550. ;
  1551. ; pascal ComponentResult InstrumentInitialize(ComponentInstance ci, long initFormat, void *initParams)
  1552. ;
  1553.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1554.         Macro
  1555.         _InstrumentInitialize
  1556.             move.l              #$00080003,-(sp)
  1557.             moveq               #0,D0
  1558.             dc.w                $A82A
  1559.         EndM
  1560.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1561.         IMPORT_CFM_FUNCTION InstrumentInitialize
  1562.     ENDIF
  1563.  
  1564. ;
  1565. ; pascal ComponentResult InstrumentOpenComponentResFile(ComponentInstance ci, short *resFile)
  1566. ;
  1567.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1568.         Macro
  1569.         _InstrumentOpenComponentResFile
  1570.             move.l              #$00040004,-(sp)
  1571.             moveq               #0,D0
  1572.             dc.w                $A82A
  1573.         EndM
  1574.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1575.         IMPORT_CFM_FUNCTION InstrumentOpenComponentResFile
  1576.     ENDIF
  1577.  
  1578. ;
  1579. ; pascal ComponentResult InstrumentCloseComponentResFile(ComponentInstance ci, short resFile)
  1580. ;
  1581.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1582.         Macro
  1583.         _InstrumentCloseComponentResFile
  1584.             move.l              #$00020005,-(sp)
  1585.             moveq               #0,D0
  1586.             dc.w                $A82A
  1587.         EndM
  1588.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1589.         IMPORT_CFM_FUNCTION InstrumentCloseComponentResFile
  1590.     ENDIF
  1591.  
  1592. ;
  1593. ; pascal ComponentResult InstrumentGetComponentRefCon(ComponentInstance ci, void **refCon)
  1594. ;
  1595.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1596.         Macro
  1597.         _InstrumentGetComponentRefCon
  1598.             move.l              #$00040006,-(sp)
  1599.             moveq               #0,D0
  1600.             dc.w                $A82A
  1601.         EndM
  1602.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1603.         IMPORT_CFM_FUNCTION InstrumentGetComponentRefCon
  1604.     ENDIF
  1605.  
  1606. ;
  1607. ; pascal ComponentResult InstrumentSetComponentRefCon(ComponentInstance ci, void *refCon)
  1608. ;
  1609.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1610.         Macro
  1611.         _InstrumentSetComponentRefCon
  1612.             move.l              #$00040007,-(sp)
  1613.             moveq               #0,D0
  1614.             dc.w                $A82A
  1615.         EndM
  1616.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1617.         IMPORT_CFM_FUNCTION InstrumentSetComponentRefCon
  1618.     ENDIF
  1619.  
  1620. ;
  1621. ; pascal ComponentResult InstrumentGetSynthesizerType(ComponentInstance ci, OSType *synthesizerType)
  1622. ;
  1623.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1624.         Macro
  1625.         _InstrumentGetSynthesizerType
  1626.             move.l              #$00040008,-(sp)
  1627.             moveq               #0,D0
  1628.             dc.w                $A82A
  1629.         EndM
  1630.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1631.         IMPORT_CFM_FUNCTION InstrumentGetSynthesizerType
  1632.     ENDIF
  1633.  
  1634.  
  1635.  
  1636. ; --------------------------
  1637. ;    Types
  1638. ;--------------------------
  1639.  
  1640.  
  1641. kNoteRequestNoGM                EQU        1                    ; dont degrade to a GM synth 
  1642. kNoteRequestNoSynthType            EQU        2                    ; dont degrade to another synth of same type but different name 
  1643. kNoteRequestSynthMustMatch        EQU        4                    ; synthType must be a match, including kGMSynthComponentSubType 
  1644. ; typedef ComponentInstance             NoteAllocator
  1645.  
  1646. NoteRequestInfo            RECORD 0
  1647. flags                     ds.b    1                ; offset: $0 (0)        ;  1: dont accept GM match, 2: dont accept same-synth-type match 
  1648. reserved                 ds.b    1                ; offset: $1 (1)        ;  must be zero 
  1649. polyphony                 ds        BigEndianShort ; offset: $2 (2)            ;  Maximum number of voices 
  1650. typicalPolyphony         ds        BigEndianFixed ; offset: $4 (4)            ;  Hint for level mixing 
  1651. sizeof                     EQU *                    ; size:   $8 (8)
  1652.                         ENDR
  1653. NoteRequest                RECORD 0
  1654. info                     ds        NoteRequestInfo ; offset: $0 (0)
  1655. tone                     ds        ToneDescription ; offset: $8 (8)
  1656. sizeof                     EQU *                    ; size:   $54 (84)
  1657.                         ENDR
  1658.  
  1659.  
  1660.  
  1661.  
  1662.  
  1663. kPickDontMix                    EQU        1                    ; dont mix instruments with drum sounds 
  1664. kPickSameSynth                    EQU        2                    ; only allow the same device that went in, to come out 
  1665. kPickUserInsts                    EQU        4                    ; show user insts in addition to ROM voices 
  1666. kPickEditAllowEdit                EQU        8                    ; lets user switch over to edit mode 
  1667. kPickEditAllowPick                EQU        16                    ; lets the user switch over to pick mode 
  1668. kPickEditSynthGlobal            EQU        32                    ; edit the global knobs of the synth 
  1669. kPickEditControllers            EQU        64                    ; edit the controllers of the notechannel 
  1670.  
  1671.  
  1672. kNoteAllocatorComponentType        EQU        'nota'
  1673.  
  1674. ; --------------------------------
  1675. ;    Note Allocator Prototypes
  1676. ;--------------------------------
  1677.  
  1678. ;
  1679. ; pascal ComponentResult NARegisterMusicDevice(NoteAllocator na, OSType synthType, Str31 name, SynthesizerConnections *connections)
  1680. ;
  1681.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1682.         Macro
  1683.         _NARegisterMusicDevice
  1684.             move.l              #$000C0000,-(sp)
  1685.             moveq               #0,D0
  1686.             dc.w                $A82A
  1687.         EndM
  1688.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1689.         IMPORT_CFM_FUNCTION NARegisterMusicDevice
  1690.     ENDIF
  1691.  
  1692. ;
  1693. ; pascal ComponentResult NAUnregisterMusicDevice(NoteAllocator na, long index)
  1694. ;
  1695.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1696.         Macro
  1697.         _NAUnregisterMusicDevice
  1698.             move.l              #$00040001,-(sp)
  1699.             moveq               #0,D0
  1700.             dc.w                $A82A
  1701.         EndM
  1702.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1703.         IMPORT_CFM_FUNCTION NAUnregisterMusicDevice
  1704.     ENDIF
  1705.  
  1706. ;
  1707. ; pascal ComponentResult NAGetRegisteredMusicDevice(NoteAllocator na, long index, OSType *synthType, Str31 name, SynthesizerConnections *connections, MusicComponent *mc)
  1708. ;
  1709.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1710.         Macro
  1711.         _NAGetRegisteredMusicDevice
  1712.             move.l              #$00140002,-(sp)
  1713.             moveq               #0,D0
  1714.             dc.w                $A82A
  1715.         EndM
  1716.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1717.         IMPORT_CFM_FUNCTION NAGetRegisteredMusicDevice
  1718.     ENDIF
  1719.  
  1720. ;
  1721. ; pascal ComponentResult NASaveMusicConfiguration(NoteAllocator na)
  1722. ;
  1723.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1724.         Macro
  1725.         _NASaveMusicConfiguration
  1726.             move.l              #$00000003,-(sp)
  1727.             moveq               #0,D0
  1728.             dc.w                $A82A
  1729.         EndM
  1730.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1731.         IMPORT_CFM_FUNCTION NASaveMusicConfiguration
  1732.     ENDIF
  1733.  
  1734. ;
  1735. ; pascal ComponentResult NANewNoteChannel(NoteAllocator na, NoteRequest *noteRequest, NoteChannel *outChannel)
  1736. ;
  1737.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1738.         Macro
  1739.         _NANewNoteChannel
  1740.             move.l              #$00080004,-(sp)
  1741.             moveq               #0,D0
  1742.             dc.w                $A82A
  1743.         EndM
  1744.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1745.         IMPORT_CFM_FUNCTION NANewNoteChannel
  1746.     ENDIF
  1747.  
  1748. ;
  1749. ; pascal ComponentResult NADisposeNoteChannel(NoteAllocator na, NoteChannel noteChannel)
  1750. ;
  1751.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1752.         Macro
  1753.         _NADisposeNoteChannel
  1754.             move.l              #$00040005,-(sp)
  1755.             moveq               #0,D0
  1756.             dc.w                $A82A
  1757.         EndM
  1758.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1759.         IMPORT_CFM_FUNCTION NADisposeNoteChannel
  1760.     ENDIF
  1761.  
  1762. ;
  1763. ; pascal ComponentResult NAGetNoteChannelInfo(NoteAllocator na, NoteChannel noteChannel, long *index, long *part)
  1764. ;
  1765.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1766.         Macro
  1767.         _NAGetNoteChannelInfo
  1768.             move.l              #$000C0006,-(sp)
  1769.             moveq               #0,D0
  1770.             dc.w                $A82A
  1771.         EndM
  1772.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1773.         IMPORT_CFM_FUNCTION NAGetNoteChannelInfo
  1774.     ENDIF
  1775.  
  1776. ;
  1777. ; pascal ComponentResult NAPrerollNoteChannel(NoteAllocator na, NoteChannel noteChannel)
  1778. ;
  1779.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1780.         Macro
  1781.         _NAPrerollNoteChannel
  1782.             move.l              #$00040007,-(sp)
  1783.             moveq               #0,D0
  1784.             dc.w                $A82A
  1785.         EndM
  1786.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1787.         IMPORT_CFM_FUNCTION NAPrerollNoteChannel
  1788.     ENDIF
  1789.  
  1790. ;
  1791. ; pascal ComponentResult NAUnrollNoteChannel(NoteAllocator na, NoteChannel noteChannel)
  1792. ;
  1793.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1794.         Macro
  1795.         _NAUnrollNoteChannel
  1796.             move.l              #$00040008,-(sp)
  1797.             moveq               #0,D0
  1798.             dc.w                $A82A
  1799.         EndM
  1800.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1801.         IMPORT_CFM_FUNCTION NAUnrollNoteChannel
  1802.     ENDIF
  1803.  
  1804.  
  1805. ;
  1806. ; pascal ComponentResult NASetNoteChannelVolume(NoteAllocator na, NoteChannel noteChannel, Fixed volume)
  1807. ;
  1808.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1809.         Macro
  1810.         _NASetNoteChannelVolume
  1811.             move.l              #$0008000B,-(sp)
  1812.             moveq               #0,D0
  1813.             dc.w                $A82A
  1814.         EndM
  1815.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1816.         IMPORT_CFM_FUNCTION NASetNoteChannelVolume
  1817.     ENDIF
  1818.  
  1819. ;
  1820. ; pascal ComponentResult NAResetNoteChannel(NoteAllocator na, NoteChannel noteChannel)
  1821. ;
  1822.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1823.         Macro
  1824.         _NAResetNoteChannel
  1825.             move.l              #$0004000C,-(sp)
  1826.             moveq               #0,D0
  1827.             dc.w                $A82A
  1828.         EndM
  1829.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1830.         IMPORT_CFM_FUNCTION NAResetNoteChannel
  1831.     ENDIF
  1832.  
  1833. ;
  1834. ; pascal ComponentResult NAPlayNote(NoteAllocator na, NoteChannel noteChannel, long pitch, long velocity)
  1835. ;
  1836.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1837.         Macro
  1838.         _NAPlayNote
  1839.             move.l              #$000C000D,-(sp)
  1840.             moveq               #0,D0
  1841.             dc.w                $A82A
  1842.         EndM
  1843.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1844.         IMPORT_CFM_FUNCTION NAPlayNote
  1845.     ENDIF
  1846.  
  1847. ;
  1848. ; pascal ComponentResult NASetController(NoteAllocator na, NoteChannel noteChannel, long controllerNumber, long controllerValue)
  1849. ;
  1850.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1851.         Macro
  1852.         _NASetController
  1853.             move.l              #$000C000E,-(sp)
  1854.             moveq               #0,D0
  1855.             dc.w                $A82A
  1856.         EndM
  1857.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1858.         IMPORT_CFM_FUNCTION NASetController
  1859.     ENDIF
  1860.  
  1861. ;
  1862. ; pascal ComponentResult NASetKnob(NoteAllocator na, NoteChannel noteChannel, long knobNumber, long knobValue)
  1863. ;
  1864.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1865.         Macro
  1866.         _NASetKnob
  1867.             move.l              #$000C000F,-(sp)
  1868.             moveq               #0,D0
  1869.             dc.w                $A82A
  1870.         EndM
  1871.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1872.         IMPORT_CFM_FUNCTION NASetKnob
  1873.     ENDIF
  1874.  
  1875. ;
  1876. ; pascal ComponentResult NAFindNoteChannelTone(NoteAllocator na, NoteChannel noteChannel, ToneDescription *td, long *instrumentNumber)
  1877. ;
  1878.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1879.         Macro
  1880.         _NAFindNoteChannelTone
  1881.             move.l              #$000C0010,-(sp)
  1882.             moveq               #0,D0
  1883.             dc.w                $A82A
  1884.         EndM
  1885.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1886.         IMPORT_CFM_FUNCTION NAFindNoteChannelTone
  1887.     ENDIF
  1888.  
  1889. ;
  1890. ; pascal ComponentResult NASetInstrumentNumber(NoteAllocator na, NoteChannel noteChannel, long instrumentNumber)
  1891. ;
  1892.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1893.         Macro
  1894.         _NASetInstrumentNumber
  1895.             move.l              #$00080011,-(sp)
  1896.             moveq               #0,D0
  1897.             dc.w                $A82A
  1898.         EndM
  1899.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1900.         IMPORT_CFM_FUNCTION NASetInstrumentNumber
  1901.     ENDIF
  1902.  
  1903.  
  1904.  
  1905. ;
  1906. ; pascal ComponentResult NAPickInstrument(NoteAllocator na, ModalFilterUPP filterProc, StringPtr prompt, ToneDescription *sd, unsigned long flags, long refCon, long reserved1, long reserved2)
  1907. ;
  1908.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1909.         Macro
  1910.         _NAPickInstrument
  1911.             move.l              #$001C0012,-(sp)
  1912.             moveq               #0,D0
  1913.             dc.w                $A82A
  1914.         EndM
  1915.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1916.         IMPORT_CFM_FUNCTION NAPickInstrument
  1917.     ENDIF
  1918.  
  1919. ;
  1920. ; pascal ComponentResult NAPickArrangement(NoteAllocator na, ModalFilterUPP filterProc, StringPtr prompt, long zero1, long zero2, Track t, StringPtr songName)
  1921. ;
  1922.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1923.         Macro
  1924.         _NAPickArrangement
  1925.             move.l              #$00180013,-(sp)
  1926.             moveq               #0,D0
  1927.             dc.w                $A82A
  1928.         EndM
  1929.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1930.         IMPORT_CFM_FUNCTION NAPickArrangement
  1931.     ENDIF
  1932.  
  1933.  
  1934. ;
  1935. ; pascal ComponentResult NASetDefaultMIDIInput(NoteAllocator na, SynthesizerConnections *sc)
  1936. ;
  1937.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1938.         Macro
  1939.         _NASetDefaultMIDIInput
  1940.             move.l              #$00040015,-(sp)
  1941.             moveq               #0,D0
  1942.             dc.w                $A82A
  1943.         EndM
  1944.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1945.         IMPORT_CFM_FUNCTION NASetDefaultMIDIInput
  1946.     ENDIF
  1947.  
  1948. ;
  1949. ; pascal ComponentResult NAGetDefaultMIDIInput(NoteAllocator na, SynthesizerConnections *sc)
  1950. ;
  1951.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1952.         Macro
  1953.         _NAGetDefaultMIDIInput
  1954.             move.l              #$00040016,-(sp)
  1955.             moveq               #0,D0
  1956.             dc.w                $A82A
  1957.         EndM
  1958.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1959.         IMPORT_CFM_FUNCTION NAGetDefaultMIDIInput
  1960.     ENDIF
  1961.  
  1962.  
  1963. ;
  1964. ; pascal ComponentResult NAUseDefaultMIDIInput(NoteAllocator na, MusicMIDIReadHookUPP readHook, long refCon, unsigned long flags)
  1965. ;
  1966.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1967.         Macro
  1968.         _NAUseDefaultMIDIInput
  1969.             move.l              #$000C0019,-(sp)
  1970.             moveq               #0,D0
  1971.             dc.w                $A82A
  1972.         EndM
  1973.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1974.         IMPORT_CFM_FUNCTION NAUseDefaultMIDIInput
  1975.     ENDIF
  1976.  
  1977. ;
  1978. ; pascal ComponentResult NALoseDefaultMIDIInput(NoteAllocator na)
  1979. ;
  1980.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1981.         Macro
  1982.         _NALoseDefaultMIDIInput
  1983.             move.l              #$0000001A,-(sp)
  1984.             moveq               #0,D0
  1985.             dc.w                $A82A
  1986.         EndM
  1987.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1988.         IMPORT_CFM_FUNCTION NALoseDefaultMIDIInput
  1989.     ENDIF
  1990.  
  1991. ;
  1992. ; pascal ComponentResult NAStuffToneDescription(NoteAllocator na, long gmNumber, ToneDescription *td)
  1993. ;
  1994.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1995.         Macro
  1996.         _NAStuffToneDescription
  1997.             move.l              #$0008001B,-(sp)
  1998.             moveq               #0,D0
  1999.             dc.w                $A82A
  2000.         EndM
  2001.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2002.         IMPORT_CFM_FUNCTION NAStuffToneDescription
  2003.     ENDIF
  2004.  
  2005. ;
  2006. ; pascal ComponentResult NACopyrightDialog(NoteAllocator na, PicHandle p, StringPtr author, StringPtr copyright, StringPtr other, StringPtr title, ModalFilterUPP filterProc, long refCon)
  2007. ;
  2008.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2009.         Macro
  2010.         _NACopyrightDialog
  2011.             move.l              #$001C001C,-(sp)
  2012.             moveq               #0,D0
  2013.             dc.w                $A82A
  2014.         EndM
  2015.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2016.         IMPORT_CFM_FUNCTION NACopyrightDialog
  2017.     ENDIF
  2018.  
  2019.  
  2020.  
  2021. ;      kNADummyOneSelect = 29
  2022. ;      kNADummyTwoSelect = 30
  2023.  
  2024.  
  2025.  
  2026. ;
  2027. ; pascal ComponentResult NAGetIndNoteChannel(NoteAllocator na, long index, NoteChannel *nc, long *seed)
  2028. ;
  2029.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2030.         Macro
  2031.         _NAGetIndNoteChannel
  2032.             move.l              #$000C001F,-(sp)
  2033.             moveq               #0,D0
  2034.             dc.w                $A82A
  2035.         EndM
  2036.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2037.         IMPORT_CFM_FUNCTION NAGetIndNoteChannel
  2038.     ENDIF
  2039.  
  2040.  
  2041. ;
  2042. ; pascal ComponentResult NAGetMIDIPorts(NoteAllocator na, QTMIDIPortListHandle *inputPorts, QTMIDIPortListHandle *outputPorts)
  2043. ;
  2044.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2045.         Macro
  2046.         _NAGetMIDIPorts
  2047.             move.l              #$00080021,-(sp)
  2048.             moveq               #0,D0
  2049.             dc.w                $A82A
  2050.         EndM
  2051.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2052.         IMPORT_CFM_FUNCTION NAGetMIDIPorts
  2053.     ENDIF
  2054.  
  2055. ;
  2056. ; pascal ComponentResult NAGetNoteRequest(NoteAllocator na, NoteChannel noteChannel, NoteRequest *nrOut)
  2057. ;
  2058.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2059.         Macro
  2060.         _NAGetNoteRequest
  2061.             move.l              #$00080022,-(sp)
  2062.             moveq               #0,D0
  2063.             dc.w                $A82A
  2064.         EndM
  2065.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2066.         IMPORT_CFM_FUNCTION NAGetNoteRequest
  2067.     ENDIF
  2068.  
  2069. ;
  2070. ; pascal ComponentResult NASendMIDI(NoteAllocator na, NoteChannel noteChannel, MusicMIDIPacket *mp)
  2071. ;
  2072.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2073.         Macro
  2074.         _NASendMIDI
  2075.             move.l              #$00080023,-(sp)
  2076.             moveq               #0,D0
  2077.             dc.w                $A82A
  2078.         EndM
  2079.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2080.         IMPORT_CFM_FUNCTION NASendMIDI
  2081.     ENDIF
  2082.  
  2083. ;
  2084. ; pascal ComponentResult NAPickEditInstrument(NoteAllocator na, ModalFilterUPP filterProc, StringPtr prompt, long refCon, NoteChannel nc, AtomicInstrument ai, long flags)
  2085. ;
  2086.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2087.         Macro
  2088.         _NAPickEditInstrument
  2089.             move.l              #$00180024,-(sp)
  2090.             moveq               #0,D0
  2091.             dc.w                $A82A
  2092.         EndM
  2093.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2094.         IMPORT_CFM_FUNCTION NAPickEditInstrument
  2095.     ENDIF
  2096.  
  2097. ;
  2098. ; pascal ComponentResult NANewNoteChannelFromAtomicInstrument(NoteAllocator na, AtomicInstrumentPtr instrument, long flags, NoteChannel *outChannel)
  2099. ;
  2100.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2101.         Macro
  2102.         _NANewNoteChannelFromAtomicInstrument
  2103.             move.l              #$000C0025,-(sp)
  2104.             moveq               #0,D0
  2105.             dc.w                $A82A
  2106.         EndM
  2107.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2108.         IMPORT_CFM_FUNCTION NANewNoteChannelFromAtomicInstrument
  2109.     ENDIF
  2110.  
  2111. ;
  2112. ; pascal ComponentResult NASetAtomicInstrument(NoteAllocator na, NoteChannel noteChannel, AtomicInstrumentPtr instrument, long flags)
  2113. ;
  2114.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2115.         Macro
  2116.         _NASetAtomicInstrument
  2117.             move.l              #$000C0026,-(sp)
  2118.             moveq               #0,D0
  2119.             dc.w                $A82A
  2120.         EndM
  2121.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2122.         IMPORT_CFM_FUNCTION NASetAtomicInstrument
  2123.     ENDIF
  2124.  
  2125.  
  2126.  
  2127. ;
  2128. ; pascal ComponentResult NAGetKnob(NoteAllocator na, NoteChannel noteChannel, long knobNumber, long *knobValue)
  2129. ;
  2130.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2131.         Macro
  2132.         _NAGetKnob
  2133.             move.l              #$000C0028,-(sp)
  2134.             moveq               #0,D0
  2135.             dc.w                $A82A
  2136.         EndM
  2137.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2138.         IMPORT_CFM_FUNCTION NAGetKnob
  2139.     ENDIF
  2140.  
  2141. ;
  2142. ; pascal ComponentResult NATask(NoteAllocator na)
  2143. ;
  2144.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2145.         Macro
  2146.         _NATask
  2147.             move.l              #$00000029,-(sp)
  2148.             moveq               #0,D0
  2149.             dc.w                $A82A
  2150.         EndM
  2151.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2152.         IMPORT_CFM_FUNCTION NATask
  2153.     ENDIF
  2154.  
  2155. ;
  2156. ; pascal ComponentResult NASetNoteChannelBalance(NoteAllocator na, NoteChannel noteChannel, long balance)
  2157. ;
  2158.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2159.         Macro
  2160.         _NASetNoteChannelBalance
  2161.             move.l              #$0008002A,-(sp)
  2162.             moveq               #0,D0
  2163.             dc.w                $A82A
  2164.         EndM
  2165.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2166.         IMPORT_CFM_FUNCTION NASetNoteChannelBalance
  2167.     ENDIF
  2168.  
  2169. ;
  2170. ; pascal ComponentResult NASetInstrumentNumberInterruptSafe(NoteAllocator na, NoteChannel noteChannel, long instrumentNumber)
  2171. ;
  2172.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2173.         Macro
  2174.         _NASetInstrumentNumberInterruptSafe
  2175.             move.l              #$0008002B,-(sp)
  2176.             moveq               #0,D0
  2177.             dc.w                $A82A
  2178.         EndM
  2179.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2180.         IMPORT_CFM_FUNCTION NASetInstrumentNumberInterruptSafe
  2181.     ENDIF
  2182.  
  2183. ;
  2184. ; pascal ComponentResult NASetNoteChannelSoundLocalization(NoteAllocator na, NoteChannel noteChannel, Handle data)
  2185. ;
  2186.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2187.         Macro
  2188.         _NASetNoteChannelSoundLocalization
  2189.             move.l              #$0008002C,-(sp)
  2190.             moveq               #0,D0
  2191.             dc.w                $A82A
  2192.         EndM
  2193.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2194.         IMPORT_CFM_FUNCTION NASetNoteChannelSoundLocalization
  2195.     ENDIF
  2196.  
  2197. ;
  2198. ; pascal ComponentResult NAGetController(NoteAllocator na, NoteChannel noteChannel, long controllerNumber, long *controllerValue)
  2199. ;
  2200.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2201.         Macro
  2202.         _NAGetController
  2203.             move.l              #$000C002D,-(sp)
  2204.             moveq               #0,D0
  2205.             dc.w                $A82A
  2206.         EndM
  2207.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2208.         IMPORT_CFM_FUNCTION NAGetController
  2209.     ENDIF
  2210.  
  2211.  
  2212.  
  2213.  
  2214.  
  2215.  
  2216. kTuneQueueDepth                    EQU        8                    ; Deepest you can queue tune segments 
  2217.  
  2218. TuneStatus                RECORD 0
  2219. tune                     ds.l    1                ; offset: $0 (0)        ;  currently playing tune 
  2220. tunePtr                     ds.l    1                ; offset: $4 (4)        ;  position within currently playing piece 
  2221. time                     ds.l    1                ; offset: $8 (8)        ;  current tune time 
  2222. queueCount                 ds.w    1                ; offset: $C (12)        ;  how many pieces queued up? 
  2223. queueSpots                 ds.w    1                ; offset: $E (14)        ;  How many more tunepieces can be queued 
  2224. queueTime                 ds.l    1                ; offset: $10 (16)        ;  How much time is queued up? (can be very inaccurate) 
  2225. reserved                 ds.l    3                ; offset: $14 (20)
  2226. sizeof                     EQU *                    ; size:   $20 (32)
  2227.                         ENDR
  2228. ; typedef ComponentInstance             TunePlayer
  2229.  
  2230.  
  2231. kTunePlayerComponentType        EQU        'tune'
  2232.  
  2233. ;
  2234. ; pascal ComponentResult TuneSetHeader(TunePlayer tp, unsigned long *header)
  2235. ;
  2236.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2237.         Macro
  2238.         _TuneSetHeader
  2239.             move.l              #$00040004,-(sp)
  2240.             moveq               #0,D0
  2241.             dc.w                $A82A
  2242.         EndM
  2243.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2244.         IMPORT_CFM_FUNCTION TuneSetHeader
  2245.     ENDIF
  2246.  
  2247. ;
  2248. ; pascal ComponentResult TuneGetTimeBase(TunePlayer tp, TimeBase *tb)
  2249. ;
  2250.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2251.         Macro
  2252.         _TuneGetTimeBase
  2253.             move.l              #$00040005,-(sp)
  2254.             moveq               #0,D0
  2255.             dc.w                $A82A
  2256.         EndM
  2257.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2258.         IMPORT_CFM_FUNCTION TuneGetTimeBase
  2259.     ENDIF
  2260.  
  2261. ;
  2262. ; pascal ComponentResult TuneSetTimeScale(TunePlayer tp, TimeScale scale)
  2263. ;
  2264.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2265.         Macro
  2266.         _TuneSetTimeScale
  2267.             move.l              #$00040006,-(sp)
  2268.             moveq               #0,D0
  2269.             dc.w                $A82A
  2270.         EndM
  2271.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2272.         IMPORT_CFM_FUNCTION TuneSetTimeScale
  2273.     ENDIF
  2274.  
  2275. ;
  2276. ; pascal ComponentResult TuneGetTimeScale(TunePlayer tp, TimeScale *scale)
  2277. ;
  2278.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2279.         Macro
  2280.         _TuneGetTimeScale
  2281.             move.l              #$00040007,-(sp)
  2282.             moveq               #0,D0
  2283.             dc.w                $A82A
  2284.         EndM
  2285.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2286.         IMPORT_CFM_FUNCTION TuneGetTimeScale
  2287.     ENDIF
  2288.  
  2289. ;
  2290. ; pascal ComponentResult TuneGetIndexedNoteChannel(TunePlayer tp, long i, NoteChannel *nc)
  2291. ;
  2292.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2293.         Macro
  2294.         _TuneGetIndexedNoteChannel
  2295.             move.l              #$00080008,-(sp)
  2296.             moveq               #0,D0
  2297.             dc.w                $A82A
  2298.         EndM
  2299.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2300.         IMPORT_CFM_FUNCTION TuneGetIndexedNoteChannel
  2301.     ENDIF
  2302.  
  2303.  
  2304. ;  Values for when to start. 
  2305.  
  2306. kTuneStartNow                    EQU        1                    ; start after buffer is implied 
  2307. kTuneDontClipNotes                EQU        2                    ; allow notes to finish their durations outside sample 
  2308. kTuneExcludeEdgeNotes            EQU        4                    ; dont play notes that start at end of tune 
  2309. kTuneQuickStart                    EQU        8                    ; Leave all the controllers where they are, ignore start time 
  2310. kTuneLoopUntil                    EQU        16                    ; loop a queued tune if there's nothing else in the queue
  2311. kTunePlayDifference                EQU        32                    ; by default, the tune difference is skipped
  2312. kTunePlayConcurrent                EQU        64                    ; dont block the next tune sequence with this one
  2313. kTuneStartNewMaster                EQU        16384
  2314. ;
  2315. ; pascal ComponentResult TuneQueue(TunePlayer tp, unsigned long *tune, Fixed tuneRate, unsigned long tuneStartPosition, unsigned long tuneStopPosition, unsigned long queueFlags, TuneCallBackUPP callBackProc, long refCon)
  2316. ;
  2317.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2318.         Macro
  2319.         _TuneQueue
  2320.             move.l              #$001C000A,-(sp)
  2321.             moveq               #0,D0
  2322.             dc.w                $A82A
  2323.         EndM
  2324.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2325.         IMPORT_CFM_FUNCTION TuneQueue
  2326.     ENDIF
  2327.  
  2328. ;
  2329. ; pascal ComponentResult TuneInstant(TunePlayer tp, unsigned long *tune, unsigned long tunePosition)
  2330. ;
  2331.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2332.         Macro
  2333.         _TuneInstant
  2334.             move.l              #$0008000B,-(sp)
  2335.             moveq               #0,D0
  2336.             dc.w                $A82A
  2337.         EndM
  2338.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2339.         IMPORT_CFM_FUNCTION TuneInstant
  2340.     ENDIF
  2341.  
  2342. ;
  2343. ; pascal ComponentResult TuneGetStatus(TunePlayer tp, TuneStatus *status)
  2344. ;
  2345.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2346.         Macro
  2347.         _TuneGetStatus
  2348.             move.l              #$0004000C,-(sp)
  2349.             moveq               #0,D0
  2350.             dc.w                $A82A
  2351.         EndM
  2352.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2353.         IMPORT_CFM_FUNCTION TuneGetStatus
  2354.     ENDIF
  2355.  
  2356. ;  Values for stopping. 
  2357.  
  2358. kTuneStopFade                    EQU        1                    ; do a quick, synchronous fadeout 
  2359. kTuneStopSustain                EQU        2                    ; don't silece notes 
  2360. kTuneStopInstant                EQU        4                    ; silence notes fast (else, decay them) 
  2361. kTuneStopReleaseChannels        EQU        8                    ; afterwards, let the channels go 
  2362. ;
  2363. ; pascal ComponentResult TuneStop(TunePlayer tp, long stopFlags)
  2364. ;
  2365.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2366.         Macro
  2367.         _TuneStop
  2368.             move.l              #$0004000D,-(sp)
  2369.             moveq               #0,D0
  2370.             dc.w                $A82A
  2371.         EndM
  2372.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2373.         IMPORT_CFM_FUNCTION TuneStop
  2374.     ENDIF
  2375.  
  2376.  
  2377. ;
  2378. ; pascal ComponentResult TuneSetVolume(TunePlayer tp, Fixed volume)
  2379. ;
  2380.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2381.         Macro
  2382.         _TuneSetVolume
  2383.             move.l              #$00040010,-(sp)
  2384.             moveq               #0,D0
  2385.             dc.w                $A82A
  2386.         EndM
  2387.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2388.         IMPORT_CFM_FUNCTION TuneSetVolume
  2389.     ENDIF
  2390.  
  2391. ;
  2392. ; pascal ComponentResult TuneGetVolume(TunePlayer tp)
  2393. ;
  2394.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2395.         Macro
  2396.         _TuneGetVolume
  2397.             move.l              #$00000011,-(sp)
  2398.             moveq               #0,D0
  2399.             dc.w                $A82A
  2400.         EndM
  2401.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2402.         IMPORT_CFM_FUNCTION TuneGetVolume
  2403.     ENDIF
  2404.  
  2405. ;
  2406. ; pascal ComponentResult TunePreroll(TunePlayer tp)
  2407. ;
  2408.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2409.         Macro
  2410.         _TunePreroll
  2411.             move.l              #$00000012,-(sp)
  2412.             moveq               #0,D0
  2413.             dc.w                $A82A
  2414.         EndM
  2415.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2416.         IMPORT_CFM_FUNCTION TunePreroll
  2417.     ENDIF
  2418.  
  2419. ;
  2420. ; pascal ComponentResult TuneUnroll(TunePlayer tp)
  2421. ;
  2422.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2423.         Macro
  2424.         _TuneUnroll
  2425.             move.l              #$00000013,-(sp)
  2426.             moveq               #0,D0
  2427.             dc.w                $A82A
  2428.         EndM
  2429.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2430.         IMPORT_CFM_FUNCTION TuneUnroll
  2431.     ENDIF
  2432.  
  2433. ;
  2434. ; pascal ComponentResult TuneSetNoteChannels(TunePlayer tp, unsigned long count, NoteChannel *noteChannelList, TunePlayCallBackUPP playCallBackProc, long refCon)
  2435. ;
  2436.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2437.         Macro
  2438.         _TuneSetNoteChannels
  2439.             move.l              #$00100014,-(sp)
  2440.             moveq               #0,D0
  2441.             dc.w                $A82A
  2442.         EndM
  2443.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2444.         IMPORT_CFM_FUNCTION TuneSetNoteChannels
  2445.     ENDIF
  2446.  
  2447. ;
  2448. ; pascal ComponentResult TuneSetPartTranspose(TunePlayer tp, unsigned long part, long transpose, long velocityShift)
  2449. ;
  2450.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2451.         Macro
  2452.         _TuneSetPartTranspose
  2453.             move.l              #$000C0015,-(sp)
  2454.             moveq               #0,D0
  2455.             dc.w                $A82A
  2456.         EndM
  2457.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2458.         IMPORT_CFM_FUNCTION TuneSetPartTranspose
  2459.     ENDIF
  2460.  
  2461.  
  2462. ;
  2463. ; pascal NoteAllocator TuneGetNoteAllocator(TunePlayer tp)
  2464. ;
  2465.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2466.         Macro
  2467.         _TuneGetNoteAllocator
  2468.             move.l              #$00000017,-(sp)
  2469.             moveq               #0,D0
  2470.             dc.w                $A82A
  2471.         EndM
  2472.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2473.         IMPORT_CFM_FUNCTION TuneGetNoteAllocator
  2474.     ENDIF
  2475.  
  2476. ;
  2477. ; pascal ComponentResult TuneSetSofter(TunePlayer tp, long softer)
  2478. ;
  2479.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2480.         Macro
  2481.         _TuneSetSofter
  2482.             move.l              #$00040018,-(sp)
  2483.             moveq               #0,D0
  2484.             dc.w                $A82A
  2485.         EndM
  2486.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2487.         IMPORT_CFM_FUNCTION TuneSetSofter
  2488.     ENDIF
  2489.  
  2490. ;
  2491. ; pascal ComponentResult TuneTask(TunePlayer tp)
  2492. ;
  2493.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2494.         Macro
  2495.         _TuneTask
  2496.             move.l              #$00000019,-(sp)
  2497.             moveq               #0,D0
  2498.             dc.w                $A82A
  2499.         EndM
  2500.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2501.         IMPORT_CFM_FUNCTION TuneTask
  2502.     ENDIF
  2503.  
  2504. ;
  2505. ; pascal ComponentResult TuneSetBalance(TunePlayer tp, long balance)
  2506. ;
  2507.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2508.         Macro
  2509.         _TuneSetBalance
  2510.             move.l              #$0004001A,-(sp)
  2511.             moveq               #0,D0
  2512.             dc.w                $A82A
  2513.         EndM
  2514.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2515.         IMPORT_CFM_FUNCTION TuneSetBalance
  2516.     ENDIF
  2517.  
  2518. ;
  2519. ; pascal ComponentResult TuneSetSoundLocalization(TunePlayer tp, Handle data)
  2520. ;
  2521.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2522.         Macro
  2523.         _TuneSetSoundLocalization
  2524.             move.l              #$0004001B,-(sp)
  2525.             moveq               #0,D0
  2526.             dc.w                $A82A
  2527.         EndM
  2528.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2529.         IMPORT_CFM_FUNCTION TuneSetSoundLocalization
  2530.     ENDIF
  2531.  
  2532. ;
  2533. ; pascal ComponentResult TuneSetHeaderWithSize(TunePlayer tp, unsigned long *header, unsigned long size)
  2534. ;
  2535.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2536.         Macro
  2537.         _TuneSetHeaderWithSize
  2538.             move.l              #$0008001C,-(sp)
  2539.             moveq               #0,D0
  2540.             dc.w                $A82A
  2541.         EndM
  2542.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2543.         IMPORT_CFM_FUNCTION TuneSetHeaderWithSize
  2544.     ENDIF
  2545.  
  2546. ;  flags for part mix. 
  2547.  
  2548. kTuneMixMute                    EQU        1                    ; disable a part 
  2549. kTuneMixSolo                    EQU        2                    ; if any parts soloed, play only soloed parts 
  2550.  
  2551. ;
  2552. ; pascal ComponentResult TuneSetPartMix(TunePlayer tp, unsigned long partNumber, long volume, long balance, long mixFlags)
  2553. ;
  2554.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2555.         Macro
  2556.         _TuneSetPartMix
  2557.             move.l              #$0010001D,-(sp)
  2558.             moveq               #0,D0
  2559.             dc.w                $A82A
  2560.         EndM
  2561.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2562.         IMPORT_CFM_FUNCTION TuneSetPartMix
  2563.     ENDIF
  2564.  
  2565. ;
  2566. ; pascal ComponentResult TuneGetPartMix(TunePlayer tp, unsigned long partNumber, long *volumeOut, long *balanceOut, long *mixFlagsOut)
  2567. ;
  2568.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2569.         Macro
  2570.         _TuneGetPartMix
  2571.             move.l              #$0010001E,-(sp)
  2572.             moveq               #0,D0
  2573.             dc.w                $A82A
  2574.         EndM
  2575.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2576.         IMPORT_CFM_FUNCTION TuneGetPartMix
  2577.     ENDIF
  2578.  
  2579.  
  2580.  
  2581.  
  2582.  
  2583. ; typedef unsigned long                 MusicOpWord
  2584.  
  2585. ; typedef unsigned long *                MusicOpWordPtr
  2586.  
  2587. ;      QuickTime Music Track Event Formats:
  2588. ;
  2589. ;    At this time, QuickTime music tracks support 5 different event types -- REST events,
  2590. ;    short NOTE events, short CONTROL events, short GENERAL events, Long NOTE events, 
  2591. ;    long CONTROL events, and variable GENERAL events.
  2592. ;        • REST Event (4 bytes/event):
  2593. ;    
  2594. ;            (0 0 0) (5-bit UNUSED) (24-bit Rest Duration)
  2595. ;        
  2596. ;        • Short NOTE Events (4 bytes/event):
  2597. ;    
  2598. ;            (0 0 1) (5-bit Part) (6-bit Pitch) (7-bit Volume) (11-bit Duration)
  2599. ;        
  2600. ;            where:    Pitch is offset by 32 (Actual pitch = pitch field + 32)
  2601. ;
  2602. ;        • Short CONTROL Events (4 bytes/event):
  2603. ;    
  2604. ;            (0 1 0) (5-bit Part) (8-bit Controller) (1-bit UNUSED) (1-bit Sign) (7-bit MSB) (7-bit LSB)
  2605. ;                                                                         ( or 15-bit Signed Value)
  2606. ;        • Short GENERAL Event (4 bytes/event):
  2607. ;    
  2608. ;            (0 1 1) (1-bit UNUSED) (12-bit Sub-Type) (16-bit Value)
  2609. ;    
  2610. ;        • Long NOTE Events (8 bytes/event):
  2611. ;    
  2612. ;            (1 0 0 1) (12-bit Part) (1-bit UNUSED) (7-bit Pitch) (1-bit UNUSED) (7-bit Volume)
  2613. ;            (1 0) (8-bit UNUSED) (22-bit Duration)
  2614. ;        
  2615. ;        • Long CONTROL Event (8 bytes/event):
  2616. ;        
  2617. ;            (1 0 1 0) (12-bit Part) (16-bit Value MSB) 
  2618. ;            (1 0) (14-bit Controller) (16-bit Value LSB)
  2619. ;    
  2620. ;        • Long KNOB Event (8 bytes/event):
  2621. ;    
  2622. ;            (1 0 1 1) (12-bit Sub-Type) (16-bit Value MSB)
  2623. ;            (1 0) (14-bit KNOB) (16-bit Value LSB)
  2624. ;    
  2625. ;        • Variable GENERAL Length Events (N bytes/event):
  2626. ;    
  2627. ;            (1 1 1 1) (12-bit Sub-Type) (16-bit Length)
  2628. ;                :
  2629. ;            (32-bit Data values)
  2630. ;                :
  2631. ;            (1 1) (14-bit UNUSED) (16-bit Length)
  2632. ;    
  2633. ;            where:    Length field is the number of LONG words in the record.
  2634. ;                    Lengths include the first and last long words (Minimum length = 2)
  2635. ;                
  2636. ;    The following event type values have not been used yet and are reserved for 
  2637. ;    future expansion:
  2638. ;        
  2639. ;        • (1 0 0 0)        (8 bytes/event)
  2640. ;        • (1 1 0 0)        (N bytes/event)
  2641. ;        • (1 1 0 1)        (N bytes/event)
  2642. ;        • (1 1 1 0)        (N bytes/event)
  2643. ;        
  2644. ;    For all events, the following generalizations apply:
  2645. ;    
  2646. ;        -    All duration values are specified in Millisecond units.
  2647. ;        -     Pitch values are intended to map directly to the MIDI key numbers.
  2648. ;        -    Controllers from 0 to 127 correspond to the standard MIDI controllers.
  2649. ;            Controllers greater than 127 correspond to other controls (i.e., Pitch Bend, 
  2650. ;            Key Pressure, and Channel Pressure).    
  2651. ;
  2652.  
  2653.  
  2654. ;  Defines for the implemented music event data fields
  2655.  
  2656. kRestEventType                    EQU        $00000000            ; lower 3-bits 
  2657. kNoteEventType                    EQU        $00000001            ; lower 3-bits 
  2658. kControlEventType                EQU        $00000002            ; lower 3-bits 
  2659. kMarkerEventType                EQU        $00000003            ; lower 3-bits 
  2660. kUndefined1EventType            EQU        $00000008            ; 4-bits 
  2661. kXNoteEventType                    EQU        $00000009            ; 4-bits 
  2662. kXControlEventType                EQU        $0000000A            ; 4-bits 
  2663. kKnobEventType                    EQU        $0000000B            ; 4-bits 
  2664. kUndefined2EventType            EQU        $0000000C            ; 4-bits 
  2665. kUndefined3EventType            EQU        $0000000D            ; 4-bits 
  2666. kUndefined4EventType            EQU        $0000000E            ; 4-bits 
  2667. kGeneralEventType                EQU        $0000000F            ; 4-bits 
  2668. kXEventLengthBits                EQU        $00000002            ; 2 bits: indicates 8-byte event record 
  2669. kGeneralEventLengthBits            EQU        $00000003            ; 2 bits: indicates variable length event record 
  2670. kEventLen                        EQU        1                    ; length of events in long words 
  2671. kXEventLen                        EQU        2
  2672. kRestEventLen                    EQU        1                    ; length of events in long words 
  2673. kNoteEventLen                    EQU        1
  2674. kControlEventLen                EQU        1
  2675. kMarkerEventLen                    EQU        1
  2676. kXNoteEventLen                    EQU        2
  2677. kXControlEventLen                EQU        2
  2678. kGeneralEventLen                EQU        2                    ; 2 or more, however 
  2679.                                                             ; Universal Event Defines
  2680. kEventLengthFieldPos            EQU        30                    ; by looking at these two bits of the 1st or last word              
  2681. kEventLengthFieldWidth            EQU        2                    ; of an event you can determine the event length                      
  2682.                                                             ; length field: 0 & 1 => 1 long; 2 => 2 longs; 3 => variable length 
  2683. kEventTypeFieldPos                EQU        29                    ; event type field for short events 
  2684. kEventTypeFieldWidth            EQU        3                    ; short type is 3 bits 
  2685. kXEventTypeFieldPos                EQU        28                    ; event type field for extended events 
  2686. kXEventTypeFieldWidth            EQU        4                    ; extended type is 4 bits 
  2687. kEventPartFieldPos                EQU        24
  2688. kEventPartFieldWidth            EQU        5
  2689. kXEventPartFieldPos                EQU        16                    ; in the 1st long word 
  2690. kXEventPartFieldWidth            EQU        12                    ; Rest Events
  2691. kRestEventDurationFieldPos        EQU        0
  2692. kRestEventDurationFieldWidth    EQU        24
  2693. kRestEventDurationMax            EQU        $00FFFFFF            ; Note Events
  2694. kNoteEventPitchFieldPos            EQU        18
  2695. kNoteEventPitchFieldWidth        EQU        6
  2696. kNoteEventPitchOffset            EQU        32                    ; add to value in pitch field to get actual pitch 
  2697. kNoteEventVolumeFieldPos        EQU        11
  2698. kNoteEventVolumeFieldWidth        EQU        7
  2699. kNoteEventVolumeOffset            EQU        0                    ; add to value in volume field to get actual volume 
  2700. kNoteEventDurationFieldPos        EQU        0
  2701. kNoteEventDurationFieldWidth    EQU        11
  2702. kNoteEventDurationMax            EQU        $000007FF
  2703. kXNoteEventPitchFieldPos        EQU        0                    ; in the 1st long word 
  2704. kXNoteEventPitchFieldWidth        EQU        16
  2705. kXNoteEventDurationFieldPos        EQU        0                    ; in the 2nd long word 
  2706. kXNoteEventDurationFieldWidth    EQU        22
  2707. kXNoteEventDurationMax            EQU        $003FFFFF
  2708. kXNoteEventVolumeFieldPos        EQU        22                    ; in the 2nd long word 
  2709. kXNoteEventVolumeFieldWidth        EQU        7                    ; Control Events
  2710. kControlEventControllerFieldPos    EQU        16
  2711. kControlEventControllerFieldWidth EQU    8
  2712. kControlEventValueFieldPos        EQU        0
  2713. kControlEventValueFieldWidth    EQU        16
  2714. kXControlEventControllerFieldPos EQU    0                    ; in the 2nd long word 
  2715. kXControlEventControllerFieldWidth EQU    16
  2716. kXControlEventValueFieldPos        EQU        0                    ; in the 1st long word 
  2717. kXControlEventValueFieldWidth    EQU        16                    ; Knob Events
  2718. kKnobEventValueHighFieldPos        EQU        0                    ; 1st long word 
  2719. kKnobEventValueHighFieldWidth    EQU        16
  2720. kKnobEventKnobFieldPos            EQU        16                    ; 2nd long word 
  2721. kKnobEventKnobFieldWidth        EQU        14
  2722. kKnobEventValueLowFieldPos        EQU        0                    ; 2nd long word 
  2723. kKnobEventValueLowFieldWidth    EQU        16                    ; Marker Events
  2724. kMarkerEventSubtypeFieldPos        EQU        16
  2725. kMarkerEventSubtypeFieldWidth    EQU        8
  2726. kMarkerEventValueFieldPos        EQU        0
  2727. kMarkerEventValueFieldWidth        EQU        16                    ; General Events
  2728. kGeneralEventSubtypeFieldPos    EQU        16                    ; in the last long word 
  2729. kGeneralEventSubtypeFieldWidth    EQU        14
  2730. kGeneralEventLengthFieldPos        EQU        0                    ; in the 1st & last long words 
  2731. kGeneralEventLengthFieldWidth    EQU        16
  2732.     IF TARGET_RT_LITTLE_ENDIAN THEN
  2733.  
  2734. kEndMarkerValue                    EQU        $00000060
  2735.     ELSE
  2736.  
  2737. kEndMarkerValue                    EQU        $60000000
  2738.     ENDIF    ; TARGET_RT_LITTLE_ENDIAN
  2739. ;  General Event Defined Types
  2740.  
  2741. kGeneralEventNoteRequest        EQU        1                    ; Encapsulates NoteRequest data structure 
  2742. kGeneralEventPartKey            EQU        4
  2743. kGeneralEventTuneDifference        EQU        5                    ; Contains a standard sequence, with end marker, for the tune difference of a sequence piece (halts QuickTime 2.0 Music) 
  2744. kGeneralEventAtomicInstrument    EQU        6                    ; Encapsulates AtomicInstrument record 
  2745. kGeneralEventKnob                EQU        7                    ; knobID/knobValue pairs; smallest event is 4 longs 
  2746. kGeneralEventMIDIChannel        EQU        8                    ; used in tune header, one longword identifies the midi channel it originally came from 
  2747. kGeneralEventPartChange            EQU        9                    ; used in tune sequence, one longword identifies the tune part which can now take over this part's note channel (similar to program change) (halts QuickTime 2.0 Music)
  2748. kGeneralEventNoOp                EQU        10                    ; guaranteed to do nothing and be ignored. (halts QuickTime 2.0 Music) 
  2749. kGeneralEventUsedNotes            EQU        11                    ; four longwords specifying which midi notes are actually used, 0..127 msb to lsb 
  2750. kGeneralEventPartMix            EQU        12                    ; three longwords: Fixed volume, long balance, long flags 
  2751. ;  Marker Event Defined Types        // marker is 60 ee vv vv in hex, where e = event type, and v = value
  2752.  
  2753. kMarkerEventEnd                    EQU        0                    ; marker type 0 means: value 0 - stop, value != 0 - ignore
  2754. kMarkerEventBeat                EQU        1                    ; value 0 = single beat; anything else is 65536ths-of-a-beat (quarter note)
  2755. kMarkerEventTempo                EQU        2                    ; value same as beat marker, but indicates that a tempo event should be computed (based on where the next beat or tempo marker is) and emitted upon export
  2756.  
  2757. kCurrentlyNativeEndian            EQU        1
  2758. kCurrentlyNotNativeEndian        EQU        2
  2759. ;  UPP call backs 
  2760.  
  2761.     ENDIF ; __QUICKTIMEMUSIC__ 
  2762.  
  2763.